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

舞夢輝影
发布: 2025-12-08 09:59:42
原创
555人浏览过
PHP冒泡排序核心是相邻元素两两比较、大的往后挪,每轮将最大值“冒泡”至末尾,共需n-1轮;可优化为提前终止,封装成函数支持任意数组,但时间复杂度为O(n²),仅适用于小数据或教学。

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

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

基本实现(双层for循环)

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

  • 外层控制轮数(共count($arr) - 1轮)
  • 内层控制每次比较范围(每轮末尾已有序,可缩小范围)
  • 若前一个元素大于后一个,就交换位置
$arr = [64, 34, 25, 12, 22, 11, 90];
<p>$n = count($arr);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - 1 - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
// 交换
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}</p><p>print_r($arr); // 输出:[11, 12, 22, 25, 34, 64, 90]
登录后复制

优化版(提前结束)

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

  • 用一个$swapped标记记录本轮是否交换
  • 若为false,直接break
$arr = [64, 34, 25, 12, 22, 11, 90];
$n = count($arr);
<p>for ($i = 0; $i < $n - 1; $i++) {
$swapped = false;
for ($j = 0; $j < $n - 1 - $i; $j++) {
if ($arr[$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 < $n - 1 - $i; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
                $swapped = true;
            }
        }
        if (!$swapped) break;
    }
}
<p>// 使用示例
$nums = [5, 2, 8, 1, 9];
bubbleSort($nums);
print_r($nums); // [1, 2, 5, 8, 9]
登录后复制

注意事项和局限性

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

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

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

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

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号