【基本算法】
假设有一个数组,需要找出某个值在该数组中的位置。
<?
//二分查找
functionbin_sch($array,$low,$high,$k){
if($low<=$high){
$mid=intval(($low+$high)/2);
if($array[$mid]==$k){
return$mid;
}elseif($k<$array[$mid]){
returnbin_sch($array,$mid-1,$k);
}else{
returnbin_sch($array,$mid+1,$k);
}
}
return-1;
}
//顺序查找
functionseq_sch($array,$n,$k){
$array[$n]=$k;
for($i=0;$i<$n;$i++){
if($array[$i]==$k){
break;
}
}
if($i<$n){
return$i;
}else{
return-1;
}
}
?>
测试代码:
array.txt 文件里面包含了一百万条类似 2,3,4,5 这样的数据,下面通过顺序查找和二分查找来确定速度。
//二分查找
<?PHP
set_time_limit(0);
$array=array();
$file=file_get_contents("./array.txt");
$array=explode(",",$file);
sort($array);
$st=time();
$k=43;
$n=count($array);
$r=bin_sch($array,0,$n-1,$k);
$et=time();
$t=$et-$st;
echo"Processtime:".$t."/s";
?>
以上输出: Process time: 0/s
//顺序查找
<?PHP
set_time_limit(0);
$array=array();
$file=file_get_contents("./array.txt");
$array=explode(",$file);
$st=time();
$k=43;
$n=count($array);
$r=seq_sch($array,$k);
$et=time();
$t=$et-$st;
echo"Processtime:".$t."/s";
?>
以上输出结果:Process time: 9/s
上面轻易就能够看出谁的效率高了。
【算法改进】
<?
//二分查找(递归消除)
functionbin_sch($array,$k){
$low=0;
$high=$n-1;
while($low<=$high){
$mid=intval(($high-$low)/2);
if($array[$mid]==$k)
return$mid;
elseif($k<$array[$mid]){
$high=$mid-1;
}else{
$low=$mid+1;
}
}
return-1;
}
//顺序查找(改进版)
functionseq_sch($array,$k){
$array[$n]=$k;
for($i=0;;$i++){
if($array[$i]==$k){
break;
}
}
if($i<$n){
return$i;
}else{
return-1;
}
}
?>
能看出上面两个函数做了什么改变吗?效率提升了多少?
原文链接:https://www.f2er.com/datastructure/383282.html