php实现快速排序(Quick Sort)

  • 从数列中挑出一个元素,称为 “基准”(pivot);
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

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);

你可能感兴趣的:(php)