函数效率比较 [两维数组按指定键值排序]
时间:2006-08-11 来源:windlike
// print array content in format
function printArr($data)
{
echo '';
print_r($data);
echo '';
}
// get micro second now
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
// randomization define a 2D array
function defineArr_2D($N,$min,$max){
//
for($i=0;$i
// 冒泡法
function sort_2d_maopao($arr,$key){
// run times (N!): 1*2*3*....(N-2)*(N-1)*N (0!=1)
$m=$n = count($arr);
for($i=0;$i $arr[$j+1][$key]){
$temp= $arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1] = $temp;
}
//echo "flag==$j
";
}
$n--;
//echo var_dump($arr)."";
}
return $arr;
}
// 二分法 + 自定义函数
function sort_2d_erfen($arr,$key,$order='ASC'){
$n = count($arr);
$l=$r=0;
for($i=1;$i $arr[0][$key]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
}// end for loop
if($l > 1){
$left = sort_2d_erfen($left,$key,$order);
}
$res = $left;
$res[] = $arr[0];
if($r > 1){
$right = sort_2d_erfen($right,$key,$order);
}
for($i=0;$i
// 二分法 + PHP系统函数
function sort_2d_erfen2($arr,$key,$order='ASC'){
$n = count($arr);
for($i=1;$i $arr[0][$key]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
}// end for loop
if(is_array($left)){
if(count($left) > 1){
$left = sort_2d_erfen2($left,$key,$order);
}
}
if(is_array($right)){
if(count($right) > 1){
$right = sort_2d_erfen2($right,$key,$order);
}
}
return @array_merge($left,array($arr[0]),$right);
}
// get used time for the function execute N times
function getUsedTime($var,$N,$fun_name){
//
$time_start = getmicrotime();
for($i=0;$i
// define all parameter for compare the functions execute efficiency below
//define max execute time for php
set_time_limit(3600); // 1 hour
//
$arr = defineArr_2D(500,0,100);
/*
//echo "
Array content before sort:
";
//printArr($arr);
//echo "
Array content after sort:
";
//printArr(sort_2d_erfen($arr,'PR'));
*/
//
$time1 = getUsedTime($arr,100,"sort_2d_maopao");
$time2 = getUsedTime($arr,100,"sort_2d_erfen");
$time3 = getUsedTime($arr,100,"sort_2d_erfen2");
//
echo "
Used time for three functions below:
";
echo "sort_2d_maopao: ".$time1."ms
";
echo "sort_2d_erfen: ".$time2."ms
";
echo "sort_2d_erfen2: ".$time3."ms
";
?>
程序运行后显示结果如下:
-----------------------------------
Used time for three functions below:
sort_2d_maopao: 98.0212869644ms
sort_2d_erfen: 10.0083320141ms
sort_2d_erfen2: 11.0764548779ms
-----------------------------------
以上比较结果说明:
1. 当N的值较小时, 函数sort_2d_maopao花费的时间较短.
2. 当N的值继续增大甚至无穷时, 函数sort_2d_erfen和sort_2d_erfen2所花费的时间明显较短.
3. 采用自定义函数的sort_2d_erfen函数sort_2d_erfen, 效率并不比采用系统函数的sort_2d_erfen函数sort_2d_erfen低. 可见在选择系统函数时, 一定要注意针对性, 择优而用.
相关阅读 更多 +