好看的皮囊千篇一律,有趣的灵魂万里挑一。
2017-5-19
我今天特地试验了一下两者的性能
php自带的排序函数 100000的数据 排序 平均耗时0.068s
for ($i = 0; $i<100000;$i++){ $arr[] = rand(0,10000); } $t1 = microtime(true); sort($arr); $t2 = microtime(true); echo "php自带排序sort()耗时:".($t2-$t1);
自己写的快速排序 平均耗时1.0s
$t1 = microtime(true); $returnAr = quickSort($arr); $t2 = microtime(true); echo "快速排序耗时:".($t2-$t1); //快速排序 function quickSort($arr) { $length = count($arr); //先判断是否需要继续进行 if($length <= 1) { return $arr; } $base_num = $arr[0]; //选择第一个元素作为基准 $left_array = array(); $right_array = array(); for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { $left_array[] = $arr[$i]; } else { $right_array[] = $arr[$i]; } } $left_array = quickSort($left_array); $right_array = quickSort($right_array); return array_merge($left_array, array($base_num), $right_array); }
明显是php自带的函数排序速度快很多。
但有时候需要二维数组排序,这时候就需要自己写啦~
function sort_arr($array,$key){ $count = count($array); if ($count==0) return false; if (count($array)==1){ return $array; } $mid = $array[0]; $left_array = array(); $right_array = array(); for ($i=1;$i<$count;$i++){ if ($array[$i][$key]>=$mid[$key]){ $right_array[]= $array[$i]; }else{ $left_array[]= $array[$i]; } } $left_array = sort_arr($left_array,$key); $right_array = sort_arr($right_array,$key); $left_array[]=$mid; if (is_array($right_array)){ return array_merge($left_array,$right_array); }else{ return $left_array; } }