php排序算法实现
PHP 排序算法实现
PHP 提供了多种内置的排序函数,如 sort()、asort()、ksort() 等,但手动实现排序算法有助于深入理解其原理。以下是几种常见排序算法的 PHP 实现:
冒泡排序(Bubble Sort)
冒泡排序通过重复遍历数组,比较相邻元素并交换位置,将较大的元素逐渐“冒泡”到数组末尾。
function bubbleSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
for ($j = 0; $j < $n - $i - 1; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
}
}
}
return $array;
}
选择排序(Selection Sort)
选择排序每次从未排序部分选择最小(或最大)元素,放到已排序部分的末尾。

function selectionSort($array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
$minIndex = $i;
for ($j = $i + 1; $j < $n; $j++) {
if ($array[$j] < $array[$minIndex]) {
$minIndex = $j;
}
}
if ($minIndex != $i) {
$temp = $array[$i];
$array[$i] = $array[$minIndex];
$array[$minIndex] = $temp;
}
}
return $array;
}
插入排序(Insertion Sort)
插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
function insertionSort($array) {
$n = count($array);
for ($i = 1; $i < $n; $i++) {
$key = $array[$i];
$j = $i - 1;
while ($j >= 0 && $array[$j] > $key) {
$array[$j + 1] = $array[$j];
$j--;
}
$array[$j + 1] = $key;
}
return $array;
}
快速排序(Quick Sort)
快速排序通过选择一个“基准”元素,将数组分为两部分,一部分小于基准,另一部分大于基准,然后递归排序这两部分。

function quickSort($array) {
if (count($array) <= 1) {
return $array;
}
$pivot = $array[0];
$left = $right = [];
for ($i = 1; $i < count($array); $i++) {
if ($array[$i] < $pivot) {
$left[] = $array[$i];
} else {
$right[] = $array[$i];
}
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
归并排序(Merge Sort)
归并排序采用分治法,将数组分成两半,分别排序后再合并。
function mergeSort($array) {
if (count($array) <= 1) {
return $array;
}
$mid = (int)(count($array) / 2);
$left = array_slice($array, 0, $mid);
$right = array_slice($array, $mid);
return merge(mergeSort($left), mergeSort($right));
}
function merge($left, $right) {
$result = [];
while (count($left) > 0 && count($right) > 0) {
if ($left[0] < $right[0]) {
$result[] = array_shift($left);
} else {
$result[] = array_shift($right);
}
}
return array_merge($result, $left, $right);
}
使用示例
以下是调用上述排序算法的示例:
$unsortedArray = [64, 34, 25, 12, 22, 11, 90];
echo "Original Array: " . implode(", ", $unsortedArray) . "\n";
$sortedArray = bubbleSort($unsortedArray);
echo "Bubble Sort: " . implode(", ", $sortedArray) . "\n";
$sortedArray = selectionSort($unsortedArray);
echo "Selection Sort: " . implode(", ", $sortedArray) . "\n";
$sortedArray = insertionSort($unsortedArray);
echo "Insertion Sort: " . implode(", ", $sortedArray) . "\n";
$sortedArray = quickSort($unsortedArray);
echo "Quick Sort: " . implode(", ", $sortedArray) . "\n";
$sortedArray = mergeSort($unsortedArray);
echo "Merge Sort: " . implode(", ", $sortedArray) . "\n";
性能比较
不同排序算法的时间复杂度和适用场景不同:
- 冒泡排序:时间复杂度为 O(n²),适合小规模数据。
- 选择排序:时间复杂度为 O(n²),适合小规模数据。
- 插入排序:时间复杂度为 O(n²),适合部分有序数据。
- 快速排序:平均时间复杂度为 O(n log n),适合大规模数据。
- 归并排序:时间复杂度为 O(n log n),适合大规模数据且需要稳定排序的场景。
以上实现可以帮助理解排序算法的基本原理,实际应用中可根据需求选择合适的内置函数或自定义实现。






