二分查找算法的前提:查找的数列为有序数列
/**
* @param $arr // 查询序列
* @param $target //要查找的值
* @param $low // 序列起始位置
* @param $high // 序列结束位置
* @return false|float|int
*/
function BinarySort($arr,$target,$low,$high)
{
$len = count($arr);
if(!$len) return -1;
$middle = ceil(($low+$high)/2); // 找到中间位置与目标值作比较
if($low > $high) return -1; // !!!很重要,如果查找的数据不存在,这是退出递归的条件
if($arr[$middle]==$target) return $middle;
else if($arr[$middle]<$target) return BinarySort($arr,$target,$middle+1,$high); // 中间位置所在值大于查找值,则在中间位置之后的序列查询即可
else return BinarySort($arr,$target,$low,$middle-1); // 反之,在中间位置之前的序列查找
}
$arr = [1,2,3,5,6,8,9];
echo BinarySort($arr,8,0,count($arr)-1);