PHP 冒泡排序与快速排序算法实例详解

Theo
Theo
发布时间:2026-10-13| 5人浏览过
原创

本文详解PHP中常用的冒泡排序与快速排序算法,提供完整代码示例供开发者直接参考与应用。

准备条件与核心逻辑

在 PHP 开发中,处理数组数据的有序排列是常见需求。以下将分别解析两种经典算法的实现步骤:一种是直观但效率较低的“冒泡排序”,另一种是分治策略高效执行的“快速排序”。

第1步:理解冒泡排序的基础实现

目的:展示最基本的两两交换思想,适合理解排序原理。入口:定义待排序数组。动作:外层循环控制遍历趟数(共 $len-1$ 趟),内层循环从后向前比较相邻元素并交换。参数:$i$ 为当前趟数,$j$ 为比较索引。状态:每轮结束后,未排序部分的最大值会被推到前端或固定位置(视循环方向而定)。

$a=array('3','8','1','4','11','7');
print_r($a);
$len = count($a);
//从小到大排序
for($i=1;$i<$len;$i++)\n{
    for($j=$len-1;$j>=$i;$j--)\n    {
        if($a[$j]<$a[$j-1])\n        { //从大到小只需将 < 改为 >
            $x=$a[$j];\n            $a[$j]=$a[$j-1];\n            $a[$j-1]=$x;
        }
    }
}
print_r($a);

第2步:优化版冒泡排序

目的:减少不必要的比较次数,提升性能。动作:引入 $flag 布尔变量记录本趟是否发生交换。若一整趟均未交换,说明已有序,提前跳出循环。重要参数:$flag 初始化为 false,每次交换置为 true。

function maopao($arr)\n{
    $len = count($arr);\n    for($i=1; $i<$len; $i++) //最多做 n-1 趟排序\n    {\n        $flag = false; //标记本轮是否有交换\n        for($j=$len-1;$j>=$i;$j--)\n        {\n            if($arr[$j]<$arr[$j-1])//交换记录\n            { //从大到小修改判断符即可\n                $x=$arr[$j];\n                $arr[$j]=$arr[$j-1];\n                $arr[$j-1]=$x;\n                $flag = true; //发生了交换,标志位置真\n            }
        }\n        if(! $flag) //如果上一轮没发生交换,说明已经排好序了,提前终止\n            return $arr; \n    }
}

第3步:掌握快速排序算法

目的:利用递归和分区技巧实现更高效的 O(n log n) 平均时间复杂度排序。入口:接收一个关联或索引数组。动作:选择一个基准值(通常取首个元素 $key),小于等于基准的值放入左数组,大于的放入右数组。对左右子数组递归执行该过程,最后拼接结果。

// 快速排序函数定义\nfunction kuaisu($arr)\n{\n    $len = count($arr);\n    if($len <= 1){ //基准情况:长度小于等于1时返回本身\n        return $arr;\n    }\n    $key = $arr[0]; //选择第一个元素作为基准\n    $left_arr = array(); //存放小于基准的元素\n    $right_arr = array(); //存放大于基准的元素\n    
    for($i=1; $i<$len;$i++){ //遍历除基准外的其余元素\n        if($arr[$i] <= $key){\n            $left_arr[] = $arr[$i];\n        }else{\n            $right_arr[] = $arr[$i];\n        }
    }\n    
    //递归调用自身,并将结果合并:[左边排序好的] + [基准] + [右边排序好的]\n    $left_arr = kuaisu($left_arr);\n    $right_arr = kuaisu($right_arr);\n    return array_merge($left_arr, array($key), $right_arr);
}

第4步:运行测试与验证

操作:调用上述函数并打印结果进行核对。结果:观察控制台输出是否符合从小到大的顺序。

$shuz = array('2','4','1','8','5');
$bb = maopao($shuz); // 测试冒泡\nprint_r($bb);\n\n$arr = array(23,98,54,2,9,62,34);\nprint_r(kuaisu($arr)); // 测试快速

以上就是关于 PHP 冒泡排序与快速排序算法的详细内容,更多关于 PHP 排序的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。