快速排序法(Quick Sort)
使用 PHP foreach 實作快速排序法
function quickSort($targets) {
// 空陣列與單一值的陣列沒得比較
if (count($targets) <= 1) {
return $targets;
}
// 定義需要同時向左與向右排序的空間
$left = [];
$right = [];
// 定義該向左還是向右的比較值(中間值),取最後一個值比較方便
$pivot = array_pop($targets);
foreach($targets as $target) {
// 若值比中間值小,則向右排,反之向左排。此為遞增排序,若要遞減,則改成大於即可。
if ($target < $pivot) {
$left[] = $target;
} else {
$right[] = $target;
}
}
// 藉由遞迴的方式,左邊的陣列持相向左排列,右邊也是。中間值則固定在中間。
return [...quickSort($left), $pivot, ...quickSort($right)];
}
// 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
print_r(quickSort([3, 2, 1, 5, 4, 6, 7, 8, 9, 10]));
Last updated