算法解析:
如果搜寻的数列已经排好序,应该尽量利用他们排好序的特性,以减少搜寻比对的次数,这是查找的基本原则,二分查找就是这个原则的代表。在二分查找中,从数列的中间开始查找,如果这个数小于我们所要查找的数,由于数列已排序,则该数左边的数一定小于要查找的数,如果要查找的数大于中间数,则从左边查找。
算法实现:
<?PHP
function bin_sch($array,$low,$high,$k){
if($low<=$high){
$mid=intval(($low+$high)/2);
if($array[$mid]==$k){
return $mid;
}elseif($k<$array[$mid]){
return bin_sch($array,$low,$mid-1,$k);
}else{
return bin_sch($array,$mid+1,$high,$k);
}
}
return-1;
}
//非递归版本
function binsearch($key,$array){
$count=count($array);
$lower=0;
$high=$count-1;
while($lower<=$high){
$middle=intval(($lower+$high)/2);
if($array[$middle]>$key)
$high=$middle-1;
else if($array[$middle]<$key)
$lower=$middle+1;
else
return $middle;
}
return-1;
}
$array = array(0,1,2,3,4,5,6,7,8,9);
echo binsearch(5,$array);