快排是一種遞歸算法,將數組劃分成較小元素和較大元素兩部分并遞歸排序,而歸并排序將數組遞歸地分成較小的數組,對每個小數組排序,再合并回原始數組。php 實現的代碼分別為:快排:將數組劃分為小于和大于基準值的元素,然后對每個部分進行遞歸排序。歸并排序:將數組遞歸地分成較小的數組,對每個較小的數組排序,然后將排序后的較小的數組合并回原始數組。
PHP 數組快排 vs. 歸并排序
什么是快排和歸并排序?
快排和歸并排序都是用于對數組進行排序的常見算法。
快排:將數組劃分為兩個部分,一個包含較小的元素,另一個包含較大的元素,然后遞歸地對每個部分排序。
歸并排序:將數組遞歸地分成較小的數組,對每個較小的數組排序,然后將排序后的較小的數組合并回原始數組。
代碼實現
以下是用 PHP 實現的快排和歸并排序函數:
快排:
function quickSort($arr) {
if (count($arr) <= 1) {
return $arr;
}
$pivot = $arr[0];
$left = [];
$right = [];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] < $pivot) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
return array_merge(quickSort($left), [$pivot], quickSort($right));
}
登錄后復制
歸并排序:
function mergeSort($arr) {
$length = count($arr);
if ($length <= 1) {
return $arr;
}
$mid = floor($length / 2);
$left = array_slice($arr, 0, $mid);
$right = array_slice($arr, $mid);
return merge(mergeSort($left), mergeSort($right));
}
function merge($left, $right) {
$result = [];
$lIndex = $rIndex = 0;
while ($lIndex < count($left) && $rIndex < count($right)) {
if ($left[$lIndex] < $right[$rIndex]) {
$result[] = $left[$lIndex++];
} else {
$result[] = $right[$rIndex++];
}
}
while ($lIndex < count($left)) {
$result[] = $left[$lIndex++];
}
while ($rIndex < count($right)) {
$result[] = $right[$rIndex++];
}
return $result;
}
登錄后復制
實戰案例
考慮一個無序的整數數組 [5, 2, 8, 3, 1, 9, 4, 7, 6].
使用快排:
$sortedArray = quickSort([5, 2, 8, 3, 1, 9, 4, 7, 6]); print_r($sortedArray);
登錄后復制
輸出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
登錄后復制登錄后復制
使用歸并排序:
$sortedArray = mergeSort([5, 2, 8, 3, 1, 9, 4, 7, 6]); print_r($sortedArray);
登錄后復制
輸出:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
登錄后復制登錄后復制






