对二分查找的局面性做了优化 ,让算法更贴近生活。
function binary1(Array $arr, $target) {
$low = 0;
$high = count($arr) - 1;
while($low <= $high) {
$mid1 = ($low + floor(($high - $low) / 3));
$mid2 = ($high - floor(($high - $low) / 3));
echo $mid1."<br/>".$mid2."<hr/>";
#找到元素。
if($arr[$mid1] == $target) return $mid1;
if($arr[$mid2] == $target) return $mid2;
#中元素比目标大,查找左部。
if($arr[$mid1] > $target) $high = $mid1 - 1;
#重元素比目标小,查找右部。
if($arr[$mid2] < $target) $low = $mid2 + 1;
if($arr[$mid2] > $target) echo $lowh = $mid1 + 1 ,$high = $mid2 - 1;
}
#查找失败
return false;
}
// echo "1"; 4 5 6 7 8 9
$arr = array(1,2,3,4, 5, 6,7,8, 9, 11,13,16,24,114);
$inx = binary1($arr,1);
echo $inx; // 索引位置。