文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>函数效率比较 [两维数组按指定键值排序]

函数效率比较 [两维数组按指定键值排序]

时间: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低. 可见在选择系统函数时, 一定要注意针对性, 择优而用.


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载