php冒泡排序从小到大的方法

PHP冒泡排序核心是相邻元素两两比较、大的往后挪,每轮将最大值“冒泡”至末尾,共需n-1轮;可优化为提前终止,封装成函数支持任意数组,但时间复杂度为O(n²),仅适用于小数据或教学。

php冒泡排序从小到大的方法

PHP冒泡排序从小到大,核心是**相邻元素两两比较、大的往后挪**,每轮把当前最大值“冒泡”到末尾,重复n-1轮即可完成升序排列

基本实现(双层for循环)

这是最直观的写法,适合理解原理:

外层控制轮数(共count($arr) – 1轮)内层控制每次比较范围(每轮末尾已有序,可缩小范围)若前一个元素大于后一个,就交换位置

$arr = [64, 34, 25, 12, 22, 11, 90];

$n = count($arr);for ($i = 0; $i < $n - 1; $i++) {for ($j = 0; $j $arr[$j + 1]) {// 交换$temp = $arr[$j];$arr[$j] = $arr[$j + 1];$arr[$j + 1] = $temp;}}}

print_r($arr); // 输出:[11, 12, 22, 25, 34, 64, 90]

优化版(提前结束)

如果某一轮没发生任何交换,说明数组已经有序,可提前退出,避免多余循环:

用一个$swapped标记记录本轮是否交换若为false,直接break

$arr = [64, 34, 25, 12, 22, 11, 90];$n = count($arr);

for ($i = 0; $i < $n - 1; $i++) {$swapped = false;for ($j = 0; $j $arr[$j + 1]) {$temp = $arr[$j];$arr[$j] = $arr[$j + 1];$arr[$j + 1] = $temp;$swapped = true;}}if (!$swapped) break;}

封装成函数(支持任意数组)

写成函数更实用,注意传参用引用&$arr可直接修改原数组:

立即学习“PHP免费学习笔记(深入)”;

function bubbleSort(&$arr) {    $n = count($arr);    for ($i = 0; $i < $n - 1; $i++) {        $swapped = false;        for ($j = 0; $j  $arr[$j + 1]) {                $temp = $arr[$j];                $arr[$j] = $arr[$j + 1];                $arr[$j + 1] = $temp;                $swapped = true;            }        }        if (!$swapped) break;    }}

// 使用示例$nums = [5, 2, 8, 1, 9];bubbleSort($nums);print_r($nums); // [1, 2, 5, 8, 9]

注意事项和局限性

冒泡排序简单易懂,但效率不高,仅适合小数据或教学场景:

时间复杂度:最坏/平均O(n²),最好(已有序)可优化到O(n)空间复杂度:O(1)(原地排序)实际开发中建议用内置sort()函数,它基于快速排序或其它高效算法

基本上就这些。理解思路比死记代码更重要——记住“两两比、大的沉底、轮轮缩、早停省力”。

以上就是php冒泡排序从小到大的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341928.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月13日 05:07:29
下一篇 2025年12月13日 05:07:40

相关推荐

发表回复

登录后才能评论
关注微信