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)
posted @ 2021-06-24 21:31  nonsenseLive  阅读(62)  评论(0)    收藏  举报