经典算法之冒泡排序

冒泡:我们可以形象的想起水泡在大海里形成的过程,它是在上升的过程中逐渐的变大,直到破裂。

冒泡 

        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个数也就没有必要在排位置,这样的话效率也就比多排一次要高。

猜你喜欢

转载自www.cnblogs.com/donghaibin/p/9056238.html