二分查找是我们经常提到的一种基础算法,他的前提是数组有规律的排列,有小到大或由大到小这类。在生活中我们也会用到,像经常做的一个猜数字的游戏,就用到了类似的逻辑。
<?php
public function actionTest()
{
$arr = array(1,4,9,11,19,22,39,44,50,55,90,89,200,390,489,1900);
$target = 22;
$info = $this->half($arr, $target);
return $info;
}
public function half($arr,$target)
{
//先设定数组的最大、最小键,计算中间键值
$min = 0;
$max = count($arr) -1;
$mid = floor(($max + $min) / 2 );
for($i = 1;$i < $max;$i++) {
if ($arr[$mid] > $target) {
// $max = $arr[$mid];
$arr = array_slice($arr, 0, $mid);
} else if ($arr[$mid] < $target) {
// $min = $arr[$mid];
$arr = array_slice($arr, $mid);
} else {
return '查找的是' . $arr[$mid] . '共查了' . $i . '次';
}
$mid = floor((count($arr))/ 2);
}
}