PHP冒泡排序核心是相邻比较、交换上浮,提供可直接运行的优化版(含$swapped提前终止)和带步骤追踪的调试版,均不修改原数组、类型声明明确、兼容PHP 7.4+及8.2。

PHP冒泡排序法的核心是“相邻比较、交换上浮”,代码不长但逻辑清晰。下面提供一个**可直接运行、带过程注释、含优化与结果验证**的完整版本,适用于 PHP 7.4 及以上(兼容 PHP 8.2),在命令行或 Web 环境中均可执行。
基础可运行版(含交换标记优化)
这段代码实现标准升序排序,加入 $swapped 标志提前终止,避免对已有序数组做冗余遍历:
<?php
function bubbleSort(array $arr): array {
$n = count($arr);
// 复制一份,不修改原数组
$sorted = $arr;
<pre class='brush:php;toolbar:false;'>for ($i = 0; $i < $n - 1; $i++) {
$swapped = false;
// 每轮后末尾 i 个元素已就位,范围缩小
for ($j = 0; $j < $n - 1 - $i; $j++) {
if ($sorted[$j] > $sorted[$j + 1]) {
// PHP 7.1+ 推荐解构赋值交换(简洁安全)
[$sorted[$j], $sorted[$j + 1]] = [$sorted[$j + 1], $sorted[$j]];
$swapped = true;
}
}
// 本轮无交换 → 全局已有序,提前退出
if (!$swapped) {
break;
}
}
return $sorted;}
// 测试数据 $test = [64, 34, 25, 12, 22, 11, 90]; echo "原始数组: "; print_r($test);
$result = bubbleSort($test); echo "排序结果: "; print_r($result); ?>
运行结果示例
执行后终端输出如下(真实可复现):
立即学习“PHP免费学习笔记(深入)”;
原始数组: Array
(
[0] => 64
[1] => 34
[2] => 25
[3] => 12
[4] => 22
[5] => 11
[6] => 90
)
排序结果: Array
(
[0] => 11
[1] => 12
[2] => 22
[3] => 25
[4] => 34
[5] => 64
[6] => 90
)
带步骤追踪的调试增强版
如需观察每轮变化(适合教学或前端动画对接),可用此版本生成完整快照数组:
- 返回包含原始状态 + 每轮结束后的数组副本的二维数组
- 使用 array_values() 确保索引连续,避免 JSON 编码异常
- 支持中文环境(JSON_UNESCAPED_UNICODE)
<?php
function bubbleSortTrace(array $arr): array {
$steps = [array_values($arr)]; // 第 0 步:原始数组
$n = count($arr);
$working = $arr;
<pre class='brush:php;toolbar:false;'>for ($i = 0; $i < $n - 1; $i++) {
$swapped = false;
for ($j = 0; $j < $n - 1 - $i; $j++) {
if ($working[$j] > $working[$j + 1]) {
[$working[$j], $working[$j + 1]] = [$working[$j + 1], $working[$j]];
$swapped = true;
}
}
$steps[] = array_values($working);
if (!$swapped) break;
}
return $steps;}
// 示例调用 $data = [5, 3, 8, 4, 2]; $trace = bubbleSortTrace($data); echo json_encode($trace, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); ?>
关键说明
- 不修改原数组:函数接收参数时未用 & 引用,返回新数组,符合函数式习惯
-
类型声明明确:
array $arr和: array提升可读性与 IDE 支持 - 交换更安全:用解构赋值替代临时变量,避免中间状态出错
-
边界处理严谨:内层循环上限为
$n - 1 - $i,防止越界访问 -
兼容性好:不依赖扩展,纯原生语法,CLI 运行只需
php sort.php



















