PHP冒泡排序核心是相邻元素两两比较、大的往后挪,每轮将最大值“冒泡”至末尾,共需n-1轮;可优化为提前终止,封装成函数支持任意数组,但时间复杂度为O(n²),仅适用于小数据或教学。
PHP冒泡排序从小到大,核心是**相邻元素两两比较、大的往后挪**,每轮把当前最大值“冒泡”到末尾,重复n-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]
如果某一轮没发生任何交换,说明数组已经有序,可提前退出,避免多余循环:
$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]
冒泡排序简单易懂,但效率不高,仅适合小数据或教学场景:
基本上就这些。理解思路比死记代码更重要——记住“两两比、大的沉底、轮轮缩、早停省力”。
# 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
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。