二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用 顺序存储结构 ,而且表中元素按关键字有序排列。
<?php
//递归方式
$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];
$target = 73; //要查找的值
$low = 0; //从0开始
$high = count($array)-1;
function bin_search($array, $low, $high, $target){
if ( $low <= $high){
var_dump($low, $high);echo "\n";
$mid = intval(($low+$high)/2 );
if ($array[$mid] == $target){
return true;
}elseif ( $target < $array[$mid]){
return bin_search($array, $low, $mid-1, $target);
}else{
return bin_search($array, $mid+ 1, $high, $target);
}
}
return false;
}
$find = bin_search($array, $low, $high, $target);
var_dump($find);
//循环方式
$array = [1,3,6,9,13,18,19,29,38,47,51,56,58,59,60,63,65,69,70,71,73,75,76,77,79,89];
$target = 73;
function bin_search($array, $target)
{
$low = 0;
$high = count($array)-1;
$find = false;
while (true){
if ($low <= $high){
var_dump($low, $high);echo "\n";
$mid = intval(($low + $high)/2);
if ($array[$mid] == $target){
$find = true;
break;
} elseif ($array[$mid] < $target){
$low = $mid+1;
} elseif ($array[$mid] > $target){
$high = $mid-1;
}
} else {
break;
}
}
return $find;
}
$find = bin_search($array, $target);
var_dump($find);