PHP 二分法查找算法
递归写法
function binary_search($arr, $number, $lower, $high)
{
$middle = intval(($lower + $high) / 2);
if (!is_array($arr) || empty($arr)) {
return -1;
}
if ($arr[$middle] < $number) {
return binary_search($arr, $number, $middle+1, $high );
} elseif ($arr[$middle] > $number) {
return binary_search($arr, $number, $lower, $middle-1);
} else {
return $middle;
}
return -1;
}
$arr = [1,2,3,4,5,6,7,8,9,10,11,23];
var_dump(binary_search($arr, 8, 0, count($arr)));
结果
int(7)
非递归写法
function binary_search($arr, $number)
{
$len = count($arr);
$lower = 0;
$high = $len - 1;
while ($lower <= $high) {
$middle = intval(($lower + $high) / 2);
if ($arr[$middle] < $number) {
$lower = $middle + 1;
} elseif ($arr[$middle] > $number) {
$high = $middle-1;
} else {
return $middle;
}
}
return -1;
}
$arr = [1,2,3,4,5,6,7,8,9,10,11,23];
var_dump(binary_search($arr, 8));
结果
int(7)

浙公网安备 33010602011771号