冒泡排序通过相邻元素比较与交换实现升序排列,每轮将最大元素“浮”至末尾,内层循环边界随轮次递减,辅以交换标志提前终止。

PHP中的冒泡排序就像一群人排队报数,从头开始两两比身高,高的往后站、矮的往前挪——每轮下来,最高的那个自然就“浮”到队尾了;下一轮继续在剩下的队伍里重复这个过程,直到整支队伍按高矮排好。
核心动作:比较 + 交换
它不靠记忆或计算,只做两件事:
- 挨个看相邻两个数,比如 $arr[0] 和 $arr[1]
- 如果前面的比后面的大(升序要求),就立刻调换位置
- 这样一路扫过去,最大的数就像气泡一样,慢慢“冒”到了最右边
为什么叫“冒泡”?
想象数组 [5, 2, 8, 1, 9]:
- 第一轮比完 → [2, 5, 1, 8, 9](9 冒到末尾)
- 第二轮只比前4个 → [2, 1, 5, 8, 9](8 归位)
- 第三轮比前3个 → [1, 2, 5, 8, 9](5 已在正确位置)
- 再跑两轮确认无交换,排序完成
实际代码里怎么体现“一轮轮缩小范围”?
内层循环的边界不是固定到底,而是随轮次收紧:
立即学习“PHP免费学习笔记(深入)”;
- 第0轮:比较索引 0→$len−2(全部相邻对)
- 第1轮:只比到 $len−3(因为末尾已有序)
- 第i轮:上限是 $len − 2 − i,越往后比得越少
聪明一点:发现已经排好了就马上停
加一个 $swapped = false 标志:
- 每轮开始设为 false
- 只要发生一次交换,就改成 true
- 一轮跑完还是 false?说明没动过 —— 数组本来就是有序的,直接退出
不复杂但容易忽略



















