<?php
declare(strict_types=1);
function binary_search(Array $array, $search) : int{
$len = count($array);
$op = 0;
$ed = $len - 1;
while($op <= $ed){
//取中间数 前一个
$center = intval(($op+$ed)/2);
//对比目标数和中间数的大小
//把数组分成两个取
if($search > $array[$center]){
// 当查询的数大于中位数 则 取中位数后半段(不包含中位数)
$op = $center+1;
}elseif($search < $array[$center]){
// 当查询的数小于中位数 则 取中位数前半段(不包含中位数)
$ed = $ed-1;
}else{
// 当查询的数等于于中位数 则范围中位数下标
return $center;
}
}
// 找不到的情况 返回-1
return -1;
}
$a = [1,2,5,6,7,9,12,15,25,39,50,60,85];
var_dump(binary_search($a,39));