PHP實現快排

代碼:

<?php
define('N', 10000);
function quickSort(&$arr){
    if(count($arr)>1){
        $k=$arr[0];
        $x=array();
        $y=array();
        $_size=count($arr);
        for($i=1;$i<$_size;$i++){
            if($arr[$i]<=$k){
                $x[]=$arr[$i];
            }elseif($arr[$i]>$k){
                $y[]=$arr[$i];
            }
        }
        $x=quickSort($x);
        $y=quickSort($y);
        return array_merge($x,array($k),$y);
    }else{
        return $arr;
    }
}

function qSort(&$arr, $left, $right){
    if($left >= $right){
        return ;
    }
    $i = $left;
    $j = $right;
    $key = $arr[$left];
    while($i < $j){
        while($i<$j && $key <= $arr[$j]){
            $j--;
        }
        $arr[$i] = $arr[$j];
        while($i<$j && $key >= $arr[$i]){
            $i++;
        }
        $arr[$j] = $arr[$i];
    }
    $arr[$i] = $key;
    qSort($arr, $left, $i-1);
    qSort($arr, $i+1, $right);
}

function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

for($i=0 ; $i < N; $i++)
$rand[] = rand(0,N);
//print_r($rand);

$startms = microtime_float();
echo "startms:" . $startms . "<br>";
//for($i=0 ; $i < 5; $i++)
$sort = quickSort($rand);
$endms = microtime_float();
echo "endms:" . $endms . "<br>";
echo $endms - $startms, "<br>";

$startms1 = microtime_float();
echo "<br>startms1:" . $startms1 . "<br>";
//for($i=0 ; $i < 5; $i++)
qSort($rand, 0, N-1);
$endms1 = microtime_float();
echo "endms1:" . $endms1 . "<br>";
echo $endms1 - $startms1;

echo "<br>",($endms - $startms)/($endms1 - $startms1);
?>


qSort()的速度較quickSort()快4倍。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章