PHP快速排序

180it 2020-09-30 PM 1380℃ 0条

思路
通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,
继续递归用相同的方式来排序左边和右边,最后合并数组
代码

<?php
$a = array(2, 13, 42, 34, 56, 23, 67, 365, 87665, 54, 68, 3);
function quicksort($a)
{
    if (count($a) <= 1) {
        return $a;
    }
    $mid = $a[0];
    $left = array();
    $right= array();
 
    foreach ($a as $k=>$v){
        if($k>0){
            if($mid < $v){
                $right[]=$a[$k];;
            }else{
                $left[]=$a[$k];;
            }
        }
    }
 
 
    // for ($i=1; $i < count($a); $i++) {
    //     if ($mid < $a[$i]) {
    //         // 大于中间值
    //         $right[] = $a[$i];
    //     } else {
    //         // 小于中间值
    //         $left[] = $a[$i];
    //     }
    // }
    //
    
 
    $left = quicksort($left);
    $right = quicksort($right);
 
    $res = array_merge($left,array($mid),$right);
 
    return $res;
}
 
 
print_r(quicksort($a));

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

PHP快速排序