PHP 二分查找
非递归
function binary_search($arr, $number) {
if (!is_array($arr) || empty($arr)) {
return -1;
}
$len = count($arr);
$lower = 0;
$high = $len - 1;
while ($lower <= $high) {
$middle = intval(($lower + $high) / 2);
if ($arr[$middle] > $number) {
$high = $middle - 1;
} else if ($arr[$middle] < $number) {
$lower = $middle + 1;
} else {
return $middle;
}
}
return -1;
}
递归
function binary_search_recursion($arr, $number, $lower, $high) {
$middle = intval(($lower + $high) / 2);
if ($lower > $high) {
return -1;
}
if ($number > $arr[$middle]) {
return binary_search_recursion($arr, $number, $middle + 1, $high);
} elseif ($number < $arr[$middle]) {
return binary_search_recursion($arr, $number, $lower, $middle - 1);
} else {
return $middle;
}
}