使用二分查找法,查找在一维数组中键值的对应键名,
例:查找 array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) 数组中键值为 12 的键名
/**
* 二分查找法
* 使用前提是有序数组
*/
public function binarySearch($value = 12, $arr = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ){
$low = 0; //数组下限下标
$high = count($arr)-1; //数组上限下标
// 注意凡是使用到while的时候,一定要防备无限循环的时候,注意终止循环的判断。
while($low <= $high){
//获取中间比较的中间下标(强制整形)
$middle = intval(($low + $high)/2);
if($value < $arr[$middle]){ //目标值 < 中间值 ,上限减1
$high = $middle - 1;
}elseif ($value > $arr[$middle]){ //目标值 > 中间值 ,下限加1
$low = $middle + 1;
}else{
return $middle; //目标值 = 中间值,匹配成功返回下标值
}
}
return -1;
}