冒泡排序

相邻元素两两比较,大的往后冒,每一轮把最大值推到末尾。

C++冒泡排序 核心代码
1int a[] = {0, 44, 60, 26, 43, 71, 53, 38, 21, 87, 25};   // a[0]=0 哨兵不参与排序(动画中不展示),排序从下标 1 开始2for (int i = 1; i < n; i++) {              // 外层:共 n-1 轮(位置 1~n-1)3  for (int j = 1; j <= n - i; j++) {        // 内层:相邻比较(a[0] 哨兵不参与)4    if (a[j] > a[j + 1]) {                 // 前者大于后者?5      swap(a[j], a[j + 1]);                // 逆序则交换6    }7  }8}
44
60
26
43
71
53
38
21
87
25
12345678910
最好O(n)
平均O(n²)
最坏O(n²)
空间O(1)
稳定
未处理选中正在比较正在交换已排好基准/已定位

💡 冒泡排序 原理速记

冒泡排序是最直观的排序算法:从第一个元素开始,依次比较相邻的两个数,若顺序不对就交换,这样每一趟都会把当前未排序部分的最大值"冒泡"到末尾。

  • 外层循环 n-1 趟,第 i 趟确定第 i 个最大值的位置。
  • 内层循环比较相邻元素,逆序则交换,越靠后的元素越先排好。
  • 若某一趟没有发生交换,说明已有序,可提前结束(最好情况 O(n))。
  • 稳定排序:相等元素不会交换,相对顺序保持不变。