PHP 实现二分查找
原理:
首先,假设数组中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子数组,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子数组,否则进一步查找后一子数组。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子数组不存在为止,此时查找不成功。
<?php
function div_search($array,$low,$high,$key){
if ($low<=$high) {
$mid = intval(($low+$high)/2);
// echo $low." ";
// echo $mid." ";
// echo $high."<br>";
//找到结果
if ($array[$mid]==$key) {
return $mid;
}elseif ($array[$mid]>$key) {
//中值比要找的值大
return div_search($array,$low,$mid-1,$key);
}else{
//中值比要找的小
return div_search($array,$mid+1,$high,$key);
}
}else{
return -1;
}
}
//输入数组按升序排列
$arr = array(1,2,5,8,9,50,222,333);
$res = div_search($arr,0,8,222);
echo $res;
?>