冒泡排序在php中通过两层for循环实现,外层控制n−1轮排序,内层逐对比较交换,使较大元素沉至末尾;可优化为提前终止无交换轮次,并需处理空数组、边界越界等细节。

冒泡排序在PHP中实现起来直观清晰,核心就是反复比较相邻元素、交换位置,让较大的数像气泡一样“沉”到末尾。只要理解两层循环的分工——外层控制轮次,内层负责逐对比较和交换——就能稳稳写出可用代码。
基本结构:两层for循环是关键
假设数组有 n 个元素,需进行 n−1 轮排序。每轮结束后,最大未排序元素就归位到末尾,所以下一轮比较范围可缩小:
- 外层循环 $i 从 0 到 n−2(共 n−1 次)
- 内层循环 $j 从 0 到 n−i−2,确保不越界(比较 $arr[$j] 和 $arr[$j+1])
- 每次判断 if ($arr[$j] > $arr[$j+1]),成立则交换
标准实现:带返回值的函数写法
推荐封装为独立函数,避免修改原数组(除非用引用):
php
function bubbleSort($arr) {
$n = count($arr);
if ($n for ($i = 0; $i for ($j = 0; $j if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
$a = [64, 34, 25, 12, 22, 11, 90];
$sorted = bubbleSort($a);
print_r($sorted);
?>
优化技巧:提前结束无交换的轮次
如果某轮内一次交换都没发生,说明数组已有序,不必继续执行剩余轮次:
- 每轮开始前设 $swapped = false
- 只要发生交换,就置 $swapped = true
- 本轮结束后检查 if (!$swapped) break;
- 对近乎有序或小规模数据,能明显减少无效遍历
注意边界与空数组处理
实际使用中容易忽略的细节:
- 空数组或单元素数组直接返回,避免循环出错
- 内层循环上限必须是 $n − $i − 1,不是 $n − $i,否则 $arr[$j+1] 会越界
- PHP 中数组索引从 0 开始,比较逻辑要严格对应升序要求(前 > 后才交换)
- 如需原地修改,函数参数加 & 符号:function bubbleSort(&$arr)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











