PHP 二分查找

来源:互联网 发布:软件定制骗局 编辑:程序博客网 时间:2024/05/22 20:06

第一种方法:
【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。   
【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。   
【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。


<?php 2     #二分查找 3     function binarySearch(Array $arr, $target) { 4         $low = 0; 5         $high = count($arr) - 1; 6          7         while($low <= $high) { 8             $mid = floor(($low + $high) / 2); 9             #找到元素10             if($arr[$mid] == $target) return $mid;11             #中元素比目标大,查找左部12             if($arr[$mid] > $target) $high = $mid - 1;13             #重元素比目标小,查找右部14             if($arr[$mid] < $target) $low = $mid + 1;15         }16         17         #查找失败18         return false;19     }20     21     $arr = array(1, 3, 5, 7, 9, 11);22     $inx = binarySearch($arr, 1);23     var_dump($inx);24 ?>
//递归版本
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,$low,$mid-1,$k);
}else{
returnbin_sch($array,$mid+1,$high,$k);
}
}
return-1;
}
//非递归版本
functionbinsearch($x,$a){
$c=count($a);
$lower=0;
$high=$c-1;
while($lower<=$high){
$middle=intval(($lower+$high)/2);
if($a[$middle]>$x)
$high=$middle-1;
elseif($a[$middle]<$x)
$lower=$middle+1;
else
return$middle;
}
return-1;
}
  

0 0
原创粉丝点击