代码:
<?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倍。