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循环,避免不必要的比较。
补充说明性能对比(从小到大排序):
冒泡/选择排序:O(n²)时间复杂度,适合小数据量。
快速排序:平均O(n log n),但最坏情况O(n²)(可通过随机化基准值优化)。
插入排序:对近乎有序数组效率高(接近O(n))。
PHP内置函数:实际开发中建议直接使用sort(),其底层为C实现,效率更高。
稳定性:
稳定排序:冒泡、插入(相等元素相对位置不变)。
不稳定排序:选择、快速。
如需进一步了解PHP高级特性或架构设计,可参考相关技术文档或社区资源。