二分查找,也是经常会问道的,以下写法主要是针对已经排好序,且不会受到重复元素影响的数组使用。
<?php
/**
* 二分查找
*
* @param string $find 要查找的值
* @param array $array 要查找的数组
* @return bool|string
*/
function binarySearch ($find, array $array)
{
// 数组开始下标
$left = 0;
// 获取数组最后一个下标
$right = count($array) - 1;
// 获取循环次数
$num = 0;
// 循环遍历
while ($left < $right) {
$num++;
// 获取中间数值
$middle = (int) (($right + $left) / 2);
// 判断
if ($array[$middle] > $find) {
$right = $middle;
} else if ($array[$middle] < $find) {
$left = $middle;
} else {
var_dump('遍历了 ' . $num . ' 次');
// 取值成功
return $array[$middle];
}
}
echo '遍历了 ' . $num . ' 次';
// 未找到
return false;
}
// 创建一个 1 到 100 的数组
$array = range(1, 100);
// 要查找的数值
$find = '1';
// 将数组乱序
$result = binarySearch($find, $array);
var_dump($result);