经典算法之冒泡排序
冒泡:我们可以形象的想起水泡在大海里形成的过程,它是在上升的过程中逐渐的变大,直到破裂。
冒泡
1.它的排序的思想:相邻的两个元素进行比较,每一轮可以获取其某个元素的合适的位置(也就是说可以求出这个数组的最左边或者是最右边的位置:即是最大值或最小值)
其次需要注意的就是它的比较的次数,按本数组来说的话:
第一轮:比较的次数 5 索引从0开始:arr.length - 1
第二轮:比较的次数 4 arr.length - 2
第三轮:比较的次数 3 。。。。
第四轮:比较的次数 2 。。。。
第五轮:比较的次数 1 arr.length - 5
第n轮 arr.length - n
2.由于要定义轮数和次数,所以需要嵌套for循环,具体的代码如下:
1 public static void bubbleSort() { 2 //使用静态初始化的方式定义一个数组。 3 int[] arr = {2,4,1,8,3,10,0}; 4 /** 5 * 注意:如果遍历轮数的索引 i = 1 的话,那么此时的 i < arr.length;此时 6 * 由于每一轮都会获取一个最大值或者最小值,所以当排到最后一个数的时候也就没有必要再次对其进行排序了 7 * 主要的原因是前面的位置已经都站定了,所以它排序与不排序都不会影响结果,如果最后一个数也排序的话,不会报错,但是会浪费资源 8 * 9 */ 10 for(int i = 0; i < arr.length - 1; i++) {//轮数 1,2,3,4,5 11 for(int j = 0; j < arr.length - i - 1; j ++) {//比较的是次数;注意最后一个数的时候,就不需要在次比较了 12 //判断,如果前一个元素大于或一个元素的话,那么就交换位置(当然也可以从小到大排序) 13 if(arr[j] > arr[j + 1]) { 14 //交换位置 15 int temp = arr[j]; 16 arr[j] = arr[j + 1]; 17 arr[j + 1] = temp; 18 } 19 } 20 } 21 //遍历数组。 22 System.out.println(Arrays.toString(arr)); 23 }
注意:以本数组为例的话,它需要执行6轮,但是需要注意的是,7个数字,如果6个数已经排好了位置,第7个数也就没有必要在排位置,这样的话效率也就比多排一次要高。