mightcell

导航

冒泡排序

冒泡排序

  • 原理
    • 每一次遍历序列,只能确定一个元素的正确位置
    • 第一次将末位元素归位,第二次将倒数第二位元素归位...
    • \(n\)个元素排序,只需要将\(n-1\)个元素归位
    • 每一次比较相邻元素,若相邻元素逆序,则交换元素位置

代码实现

public class Solution {

    public void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int end = n - 1; end >= 0; end--) {
            for (int second = 1; second <= end; second++) {
                if (arr[second] < arr[second - 1]) {
                    int temp = arr[second];
                    arr[second] = arr[second - 1];
                    arr[second - 1] = temp;
                }
            }
        }

    }
}
  • 总结

    • 外层循环用来控制排序的次数,\(n\)个元素排序,只需要将\(n-1\)个元素归位
    • 比较区间:\([0,n-1],[0,n-2],[0,n-3],...,[0,1]\)
    • 每次外层循环开始,从第二个元素开始比较(索引为\(1\)),到最后一个元素结束(索引为\(n-1\)
  • 时间复杂度分析

    根据冒泡排序关键循环,有

    \[\sum\limits_{i=0}^{n-1}\sum\limits_{j=1}^{i}1=\sum\limits_{i=0}^{n-1}(i-1+1)=\frac{n(n-1)}{2}=\frac{1}{2}n^2-\frac{1}{2}n \]

    因此,冒泡排序的时间复杂度为\(O(n^2)\)

posted on 2022-06-14 14:49  丹江口阿斯顿  阅读(12)  评论(0编辑  收藏  举报