测试用例
$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);
}
}
网友评论