冒泡排序从左往右依次比较相邻两个数,前大后小(逆序)就交换。一趟下来,最大的数一定被换到最右端,就像气泡往上冒;下一趟只需处理前面还没排好的部分,所以第 i 趟比较 n−i 次。n 个数最多 n−1 趟,比较总数 (n−1)+(n−2)+…+1 = n(n−1)/2,时间复杂度 O(n²)。交换次数取决于初始顺序:完全逆序时每次比较都交换,已有序时一次也不换。加一个 swapped 标记,某趟没有交换就说明已经有序,可以提前结束。
第 i 趟比较次数 = n − i
比较总数 = (n−1)+(n−2)+…+1 = n(n−1)/2
最坏交换次数(完全逆序)= n(n−1)/2
时间复杂度 O(n²)
· 易错:外层只需 n−1 趟(最后剩下的一个自然在最前面),内层 j 只到 n−i−1
· 易错:比较次数与初始顺序无关;变化的是交换次数
· 教材也有从后往前、把最小数“冒”到最前面的写法,原理完全相同
· 生活中:体育课按身高排队、整理一排高矮不齐的书