冒泡排序--双层嵌套,两两比较

时间:2022-04-18 20:01:22

冒泡排序的思想
1. 比较相邻元素,按需求归位。
2. 冒泡排序双层嵌套,外层负责比较次数,内层负责比较归位数据。
3. 最大或最小数据的归位后,为优化性能不应该再次进行比较。

冒泡排序实现

public class BubbleSort {

    public static void main(String[] args){
        //定义并直接初始化数组
        int [] arr = {1,8,9,6,3,5,7,4};
        //外层循环,取得循环次数
        for (int i = arr.length-1; i > 0;i--) {
            //内层循环,比较把最大数归位
            for (int j = 0; j < i; j++) {
                if(arr[j] > arr[j+1]){
                    //定义中间变量,并交换位置
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        //遍历输出排序好的数组
        for(int k:arr){
            System.out.print(k+" ");
        }
    }
}

冒泡排序的时间复杂度

  1. (比较次数最少)所给列表和预期一致,即所给数据为正序或反序排列好的。则一趟扫描即可完成,内层循环关键字比较次数为n-1,置换元素次数0(即交换位置的代码不执行);忽略系数后时间复杂度为O(n);
  2. (比较次数最多)如果所给数据与预期刚好相反,如需要正序给的为反序。则需要进行置换排序操作了,每趟关键字的比较次数为比较次数n(n-1)/2=O(n^2),忽略系数计算时间复杂度为O(n^2),移动次数每次也进行3次移动置换操作3n(n-1)/2=O(n^2),忽略系数时间复杂度为O(n^2)。
  3. 平均时间复杂度为O(n^2)。

冒泡排序的稳定性
稳定性指排序后相同的元素是否会调换位置。
冒泡排序讲究把小的元素往前调或者把大的元素往后调。冒泡排序比较相邻元素,相同元素排序后仍然是原顺序,所以冒泡排序是稳定的。(如果相邻元素相同跳过比较了,所以排序后的结果是稳定的)

冒泡排序的优缺点
优点:代码简单,双层嵌套即可实现,具有稳定性
缺点:时间复杂度高