快速排序

//快速排序,从数组重找到一个基准,然后把所有的数和这个基准比较,分为大于这个基准的数组,和小于这个数的基准数组。然后再递归执行就行

$arr = [2,376,3,1,65,123,758,1234,7856,123];
//快速排序
//选取一个标准,和其他数据对比后将数据分为两批,递归执行后合并
function quickSort(&$arr, $sort = 'asc'){

    //检查数据,多于一个数据才执行
    $nCount = count($arr);
    if($nCount > 1) {
        //选取标准(第一个数据)
        $nStandard = $arr[0];
        $arrLeftData = [];
        $arrRightData = [];
        //遍历,注意这里从1开始比较
        for($i = 1; $i < $nCount; $i++) {

            if($sort == 'desc') {
                $arr[$i] > $nStandard ? $arrLeftData[] = $arr[$i] : $arrRightData[] = $arr[$i];
            } else {
                $arr[$i] > $nStandard ? $arrRightData[] = $arr[$i] : $arrLeftData[] = $arr[$i];
            }
        }
        $arr = array_merge(quickSort($arrLeftData, $sort), array($nStandard), quickSort($arrRightData, $sort));
    }
    return $arr;
}
$arr = quickSort($arr,'asc');
print_r($arr);exit;

  

posted on 2018-11-05 15:57  泪滴  阅读(125)  评论(0编辑  收藏  举报