php快速排序

思路:找一个值作为中间值,然后比他小的放到左边,比他大的放到右边,递归查找排序,最后这个值左边都是比他小的,右边都是比他大的,他是中间的位置,最后合并数组

<?php

$a = array(2,13,42,34,56,23,67,365,87665,54,68,3);
function quick_sort($a){
    if (count($a)<=1){
        return $a;
    }
    $middle = $a[0];
    $left = [];
    $right = [];
    for($i=1; $i<count($a); $i++){
        if ($middle < $a[$i]){
            $right[] = $a[$i];
        } else {
            $left[] = $a[$i];
        }
    }
    
    $left = quick_sort($left);
    $right = quick_sort($right);
    
    return array_merge($left, [$middle], $right);
}
var_dump(quick_sort($a));