冒泡排序在php中可通过三种方式实现:一是双重for循环逐轮比较交换;二是while循环配合标志位优化提前终止;三是封装为支持升序/降序切换的可复用函数。

如果需要在PHP中对一组数值进行升序或降序排列,冒泡排序是一种基础且易于理解的实现方式。以下是几种不同的PHP实现方法:
一、使用双重for循环实现冒泡排序
该方法通过外层循环控制排序轮数,内层循环逐次比较相邻元素并交换位置,使较大(或较小)元素逐步“浮”到数组末端。
1、定义一个包含无序数字的数组,例如 $arr = [64, 34, 25, 12, 22, 11, 90];
2、使用外层for循环,从第0轮开始,共执行 count($arr) - 1 轮;
3、在每轮中使用内层for循环,从索引0遍历至 count($arr) - 2 - 当前轮数;
4、比较 $arr[j] 与 $arr[j + 1],若前者大于后者,则交换两者值;
5、交换操作可借助临时变量或PHP的列表赋值语法:list($arr[j], $arr[j + 1]) = [$arr[j + 1], $arr[j]];
6、完成所有轮次后,数组即为升序排列结果。
二、使用while循环与标志位优化实现
该方法引入布尔标志位检测某轮是否发生交换,若未发生交换则提前终止,避免冗余比较,提升小规模或近似有序数据的效率。
1、初始化 $swapped = true 和 $n = count($arr);
2、当 $swapped 为 true 时进入 while 循环,并立即将 $swapped 设为 false;
3、使用 for 循环从索引 0 遍历至 $n - 2;
4、若 $arr[i] > $arr[i + 1],则交换两元素,并将 $swapped 设为 true;
5、每轮结束后,$n 自减 1,缩小下一轮比较范围;
6、循环结束时数组已完成排序。
三、封装为可复用函数并支持升序/降序切换
该方法将冒泡逻辑抽象为带参数的函数,通过布尔型 $ascending 参数控制排序方向,增强代码通用性与可维护性。
1、定义函数 function bubbleSort(array $arr, bool $ascending = true): array;
2、在函数内部复制输入数组以避免修改原数组;
3、外层循环控制轮数,内层循环执行相邻比较;
4、比较条件根据 $ascending 决定:升序时用 >,降序时用
5、使用 list() 语法完成交换,确保语句简洁;
6、返回排序后的新数组,调用时可传入 true 或 false 指定顺序。
四、使用引用传递原地排序以节省内存
该方法不创建新数组,而是直接修改原始数组内容,适用于内存受限或需保留数组变量引用的场景。
1、定义函数 function bubbleSortInPlace(array &$arr, bool $ascending = true): void;
2、参数 $arr 声明为引用类型,使用 & 符号;
3、省略返回语句,在函数体内直接操作 $arr;
4、内层循环边界设为 count($arr) - $i - 1,随轮次递减;
5、比较与交换逻辑同前述方法,但所有变更直接影响原始数组;
6、调用后原数组内容已被修改,无需重新赋值,注意此操作不可逆。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











