PHP 实现冒泡排序代码详解与优化

白榆
白榆
发布时间:2026-10-13 | 4人浏览过
原创

冒泡排序是基础的排序算法之一,PHP 实现简单直观。核心在于通过相邻元素的比较与交换,将最大值逐层“冒泡”至数组末端。本文将演示原始逻辑代码,并提供带提前终止条件的优化方案,以应对大部分已排序数据的场景。

冒泡排序原理

冒泡排序(Bubble Sort)的基本操作是重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

具体流程如下:

  1. 第一趟:从第一个元素开始,依次比较相邻的两个数。如果前一个数大于后一个数,则交换位置。经过这一轮比较,最大的数会被移动到数组的最末尾。
  2. 后续趟数:排除已排好序的最后一个元素,对剩余未排序部分重复上述过程。第二趟结束后,第二大数会位于倒数第二位。
  3. 结束条件:持续这个过程,直到某一趟中没有发生任何交换,或者所有元素都已归位,排序完成。

PHP 代码实现

第1步:定义基础排序函数

在 PHP 中,数组默认是按值传递的。为了直接在原数组上进行修改,我们需要使用引用符号 & 将数组传入函数。以下是标准的实现代码:

<?php
/**
 * 冒泡排序函数
 * @param array $arr 引用传递的待排序数组
 */
function bubbleSort(&$arr) {
    $len = count($arr);
    
    // 外层循环控制需要进行多少趟比较
    for ($i = 0; $i < $len - 1; $i++) {
        // 内层循环进行相邻元素比较,每次减少已排好的尾部元素
        for ($j = 0; $j < $len - 1 - $i; $j++) {
            // 如果前一个元素大于后一个元素,则交换
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
}

// 测试数据
$data = array(100, 99, 200, 5, -4, 6, -7);
bubbleSort($data);
print_r($data);
?>

运行上述代码,输出结果为: -7, -4, 5, 6, 99, 100, 200

第2步:引入优化逻辑(可选)

原始版本在所有情况下都会跑完所有循环。但在某些场景下,数组可能在中间某趟就已经完全有序。此时应加入 $flag 标记,若一趟内无交换发生,则提前结束循环,从而提高执行效率。

<?php
function optimizedBubbleSort(&$arr) {
    $len = count($arr);
    
    for ($i = 0; $i < $len - 1; $i++) {
        $flag = true; // 假设本趟无序
        
        for ($j = 0; $j < $len - 1 - $i; $j++) {
            if ($arr[$j] > $arr[$j + 1]) {
                // 交换逻辑
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
                $flag = false; // 发生了交换,数组仍可能无序
            }
        }
        
        // 如果本趟没有发生任何交换,说明数组已有序,直接退出
        if ($flag) break;
    }
}
?>

注意事项

  • 性能瓶颈:冒泡排序的时间复杂度为 O(n²),适合数据量较小或基本有序的场景。对于大规模数据,建议使用 sort() 内置函数或快速排序等更高效率的算法。
  • 参数类型:务必注意函数签名中的 &$arr,缺少它会导致函数内部修改不影响外部变量。

以上就是 PHP 实现冒泡排序的详细代码实例与优化思路,更多关于 PHP 算法基础的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表