- 从数列中挑出一个元素,称为 “基准”(pivot);
- 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
- 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
<?php
function quicksort($arr){
if(count($arr) < 2){
return $arr;
}
$pivot = $arr[0];
$less = [];
$greater = [];
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] < $pivot) {
$less[] = $arr[$i];
} else {
$greater[] = $arr[$i];
}
}
return array_merge(quicksort($less),[$pivot],quicksort($greater));
}
$test = quicksort([5,10,2,3,6,3,4]);
print_r($test);