升序冒泡用“>”使小数上浮,降序用“<”使大数前移,其余逻辑、循环、交换、边界处理完全相同。

核心区别只在比较符号
升序和降序的冒泡排序,逻辑结构完全一样,唯一变动就是相邻元素比较时用的运算符。升序用 >,表示“前大于后就交换”,让小数上浮;降序用 <,表示“前小于后就交换”,让大数前移。其余循环控制、交换操作、边界处理全部一致。
两段代码直观对比
假设数组为 [5, 2, 8, 1]:
-
升序版本:内层判断写
if ($arr[$j] > $arr[$j+1])→ 小值逐步移到开头 -
降序版本:仅把符号换成
if ($arr[$j] → 大值逐步移到开头
交换语句、外层轮次控制($i)、内层范围缩减($n - $i - 1)完全相同,无需额外修改。
为什么改一个符号就能翻转顺序
冒泡排序的本质是“逐轮固定极值位置”。每轮遍历后,总有一个最值被推到当前未排序区间的末端。升序时,最大值沉到底部;降序时,最小值沉到底部——这恰恰是因为比较方向反转,导致“被推动”的极值类型变了。不是算法变,而是你定义了“谁该优先出列”。
立即学习“PHP免费学习笔记(深入)”;
实际使用建议
不必为升序、降序各写一个函数:
- 可封装成单个函数,加一个
$descending = false参数,内部用三元切换条件 - 对简单需求,直接用内置函数更高效:
sort()升序、rsort()降序,它们底层优化充分且稳定 - 若教学或调试需要手写冒泡,专注理解
>和<如何引导数据流向即可



















