冒泡排序是通过重复比较相邻元素并交换实现升序排序的稳定算法,时间复杂度最坏/平均为o(n²)、最好为o(n),空间复杂度o(1),适合教学与小规模数据。

冒泡排序是一种基础的交换排序算法,原理简单、易于理解,适合初学者掌握排序逻辑。它的核心思想是重复遍历待排序数组,比较相邻两个元素,若顺序错误(如升序时左大于右)则交换位置,每轮遍历都会将当前未排序部分的最大值“冒泡”到末尾。
冒泡排序的基本实现(升序)
以下是一个标准的 PHP 冒泡排序函数,使用双重循环完成排序:
function bubbleSort($arr) {
$n = count($arr);
// 外层控制排序轮数
for ($i = 0; $i $arr[$j + 1]) {
// 交换元素
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
<p>// 示例使用
$numbers = [64, 34, 25, 12, 22, 11, 90];
print_r(bubbleSort($numbers));
// 输出:Array ( [0] => 11 [1] => 12 [2] => 22 [3] => 25 [4] => 34 [5] => 64 [6] => 90 )</p>优化版本:提前终止机制
如果某一轮遍历中没有发生任何交换,说明数组已有序,可提前结束,避免无效循环:
function bubbleSortOptimized($arr) {
$n = count($arr);
for ($i = 0; $i $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
$swapped = true;
}
}
// 若本轮无交换,说明已排好序
if (!$swapped) break;
}
return $arr;
}
支持自定义比较规则(通用化)
通过传入回调函数,可灵活支持降序、字符串长度排序或对象属性比较:
function bubbleSortCustom($arr, $compareFunc = null) {
if ($compareFunc === null) {
$compareFunc = function($a, $b) { return $a > $b; };
}
<pre class="brush:php;toolbar:false;">$n = count($arr);
for ($i = 0; $i <p>}</p><p>// 降序排列
$desc = bubbleSortCustom([3, 1, 4, 1, 5], function($a, $b) { return $a </p><p>// 按字符串长度排序
$words = ['<a style="color:#f60; text-decoration:underline;" title="php" href="https://m.php.cn/zt/15714.html" target="_blank">php</a>', 'js', 'python', 'c'];
$byLength = bubbleSortCustom($words, function($a, $b) { return strlen($a) > strlen($b); });</p>时间与空间复杂度说明
冒泡排序不是高效算法,但在教学和小规模数据场景下仍有价值:
- 最好情况:数组已有序,优化后时间复杂度为 O(n),只需一次遍历
- 最坏/平均情况:完全逆序或随机,时间复杂度为 O(n²)
- 空间复杂度:O(1),仅使用常量级额外变量
- 稳定性:稳定排序(相等元素的相对位置不会改变)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











