发布时间2019-06-26 23:23:47
30
0
0

如果要排序数组中下标从 p 到 r 之间的一组数据,选择 p 到 r 之间的任意一个数据作为 pivot(分区点)。 遍历 p 到 r 之间的数据,将小于 pivot 的数据放到左边,大于 pivot 的数据放到 右边,将 pivot放到中间。

function partition(&$num,$start,$end){
    $pivot = $num[$end];
    $i = $start;

    for($j = $i;$j < $end; $j++){
        if($num[$i] < $num[$j]){
            $temp = $num[$j];
            $num[$j] = $num[$i];
            $num[$i] = $temp;
            $i++;
        }
    }

    $temp = $num[$i];
    $num[$i] = $pivot;
    $num[$end]=$temp;
    return $i;
}
function quick_c(&$num,$start,$end){
    if($start >= $end){
        return;
    }

    $q = particion($num,$start,$end);
    quick_c($num,$start,$q-1);
    quicl_c($num,$q+1,$end);
}
function quick_sort($nums){
    if(count($nums) <= 1){
        return $nums;
    }
    quick_c($num,0,count($nums)-1);
    return $nums;
}