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


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

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 < $n - 1 - $i; $j++) { if ($arr[$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 < $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可直接修改原数组:

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;
    }
}

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

注意事项和局限性

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

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

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


# php  # app  # 排列  # 冒泡排序  # count  # sort  # for  # 封装  # break  # 快速排序  # 循环  # 算法  # 这是  # 升序  # 适用于  # 不高  # 更重要  # 可直接  # 或其它  # 本轮  # 从小到大  # 最坏 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Windows10系统怎么查看已安装更新_Win10控制面板卸载补丁  php怎么下载安装后设置错误日志_phpini log配置教程【汇总】  php本地部署支持nodejs吗_php与nodejs混合开发环境搭建教程【教程】  Win10电脑C盘红了怎么清理_Windows10系统盘深度瘦身指南  Mac如何设置动态壁纸?(让桌面动起来)  VSC怎样用终端运行PHP_命令行执行脚本的步骤【教程】  php485返回空数组怎么回事_php485数据接收为空排查指南【详解】  Mac如何使用听写功能_Mac语音输入打字【效率技巧】  Python网络异常模拟_测试说明【指导】  c++怎么使用std::unique实现去重_c++ 容器元素排序与连续重复删除【教程】  Python与Docker容器化部署实战_镜像构建与CI/CD流程  如何使用Golang安装API文档生成工具_快速生成接口文档  php本地部署后数据库连接报错_1045accessdenied错误解决方法详解【汇总】  如何优化Golang程序CPU性能_Golang CPU密集型任务优化方法  php订单日志怎么记录评价_php记录订单评价日志方法【方法】  Win11怎么更改账户头像_Windows 11自定义用户头像图片设置【步骤】  如何从 Go 的 map[string]interface{} 中安全获取值  Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案  Win10文件历史记录怎么用 Win10开启自动备份文件教程【防丢】  如何使用Golang实现云原生应用弹性伸缩_自动应对流量变化  如何使用Golang recover捕获panic_防止程序崩溃并处理异常  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】  Win11时间不对怎么同步_Win11自动校准互联网时间【设置】  Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  C++中的constexpr和const有什么区别?(编译期常量)  c# 服务器GC和工作站GC的区别和设置  Python解释执行模型_字节码流程说明【指导】  Win11怎么关闭透明效果_Windows11个性化颜色关闭透明  Win10 BitLocker加密教程 Win10给磁盘驱动器上锁【安全】  php转exe用什么工具打包快_高效打包软件推荐【汇总】  php订单日志怎么在swoole写_php协程swoole写订单日志教程【教程】  Linux怎么设置磁盘配额_Linux系统Quota安装与用户空间限制【教程】  Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】  如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】  php修改数据怎么批量改状态_批量更新status字段值技巧【操作】  如何使用正则表达式批量替换重复的星号-短横模式为固定字符串  Windows10如何删除Windows.old_Win10磁盘清理系统文件选项  Win11怎么设置虚拟内存最佳大小_Windows11性能选项自定义分页文件  如何在JavaScript中动态拼接PHP的base_url与前端变量  Win11怎样安装搜狗输入法_Win11安装搜狗输入法教程【步骤】  如何使用Golang处理静态文件缓存_提高页面加载速度  php中self::能调用子类重写的方法吗_静态绑定与重写关系【介绍】  Win11怎么清理C盘虚拟内存_Win11清理虚拟内存设置【教程】  如何高效删除 NumPy 二维数组中所有元素相同的列  MAC如何启用访达侧边栏显示_MAC Finder偏好设置与常用目录添加【教程】  如何在Golang中操作嵌套切片指针_Golang多维slice修改  MAC如何快速搜索大文件_MAC磁盘空间分析与冗余数据清理【方法】  Win11如何开启系统更新 Win11开启系统更新方法【步骤】 

 2025-12-08

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.