快排是一種遞歸算法,將數組劃分成較小元素和較大元素兩部分并遞歸排序,而歸并排序將數組遞歸地分成較小的數組,對每個小數組排序,再合并回原始數組。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]
登錄后復制登錄后復制