PHP实现一些常见的排序算法

PHP实现一些常见的排序算法
最新回答
三生一梦

2026-10-22 15:48:30

以下是PHP实现的常见排序算法代码及说明:

1. 冒泡排序function bubbleSort($list) { $len = count($list); for ($i = 0; $i < $len - 1; $i++) { for ($j = 0; $j < $len - $i - 1; $j++) { if ($list[$j] > $list[$j + 1]) { $tmp = $list[$j]; $list[$j] = $list[$j + 1]; $list[$j + 1] = $tmp; } } } return $list;}

原理:通过相邻元素两两比较,每轮将最大值"冒泡"到数组末尾。优化点:内层循环次数随轮次减少($len - $i - 1)。

2. 选择排序function selectionSort($list) { $len = count($list); for ($i = 0; $i < $len - 1; $i++) { $pos = $i; for ($j = $i + 1; $j < $len; $j++) { if ($list[$pos] > $list[$j]) { $pos = $j; } } if ($pos != $i) { $tmp = $list[$pos]; $list[$pos] = $list[$i]; $list[$i] = $tmp; } } return $list;}

原理:每轮选择未排序部分的最小值,与当前位置交换。特点:减少交换次数(每轮最多一次交换)。

3. 快速排序function quickSort($list) { $len = count($list); if ($len <= 1) return $list; $base = $list[0]; $left = $right = []; for ($i = 1; $i < $len; $i++) { if ($list[$i] < $base) { $left[] = $list[$i]; } else { $right[] = $list[$i]; } } return array_merge(quickSort($left), [$base], quickSort($right));}

原理:分治法,选取基准值将数组分为左右两部分递归排序。注意:基准值选择可能影响效率(示例中固定选首元素)。

4. 插入排序function insertionSort($list) { $len = count($list); for ($i = 1; $i < $len; $i++) { $tmp = $list[$i]; $j = $i - 1; while ($j >= 0 && $list[$j] > $tmp) { $list[$j + 1] = $list[$j]; $j--; } $list[$j + 1] = $tmp; } return $list;}

原理:将未排序元素插入到已排序部分的正确位置。优化:使用while替代内层for循环,避免不必要的比较。

补充说明
  1. 性能对比(从小到大排序):

    冒泡/选择排序:O(n²)时间复杂度,适合小数据量。

    快速排序:平均O(n log n),但最坏情况O(n²)(可通过随机化基准值优化)。

    插入排序:对近乎有序数组效率高(接近O(n))。

  2. PHP内置函数:实际开发中建议直接使用sort(),其底层为C实现,效率更高。

  3. 稳定性:

    稳定排序:冒泡、插入(相等元素相对位置不变)。

    不稳定排序:选择、快速。

如需进一步了解PHP高级特性或架构设计,可参考相关技术文档或社区资源。