快速排序

测试用例

$start = microtime();
$arr=array(5,1,0,3,9,10,59,41,78,56,45,47,12,15,45,11);
//基础版
$arr = quickSortBasic($arr);
// var_dump($arr);
$end = microtime();
var_dump($end - $start);

$start = microtime();
$arr=array(5,1,0,3,9,10,59,41,78,56,45,47,12,15,45,11);
//优化版
quickSort($arr,0,count($arr)-1);
// var_dump($arr);
$end = microtime();
var_dump($end - $start);

基本版

// 基础版
function quickSortBasic(&$arr){
    if(count($arr)>1){
        # code...
        $temp = $arr[0];
        $small = array();
        $large = array();
        $size = count($arr);
        for ($i=1; $i < $size ; $i++) { 
            # code...
            if($arr[$i] > $temp){
                $large[] = $arr[$i];
            }else{
                $small[] = $arr[$i];
            }
        }
        $small = quickSortBasic($small);
        $large = quickSortBasic($large);
        return array_merge($small,array($temp),$large);
    }else{
        return $arr;
    }
}

优化版

//优化版
function quickSort(&$arr,$index,$last){
    if($index < $last){
        $left = $index;
        $right = $last;
        $temp = $arr[$index];
        while ($left < $right) {
            while ($left < $right && $arr[$right] > $temp) {
                $right--;
            }
            if($left < $right){
                $arr[$left++] = $arr[$right];
            }
            while ($left < $right && $arr[$left] < $temp) {
                $left++;
            }
            if($left < $right){
                $arr[$right--] = $arr[$left];
            }
        }
        $arr[$left] = $temp;
        quickSort($arr, $index , $left - 1);
        quickSort($arr, $left + 1, $last);
    }
}

你可能感兴趣的:(快速排序)