在一列有序数组中,查找某个元素。
思想:其实就是每次划1为2,确定要找的值,在哪个范围中,进而排除掉另一块范围,这种对大数据量的查找很友好。
用php代码来实现:
public function binSearch($arr = [11, 12, 22, 25, 34, 64, 90], $target = 25) {
$leftIdx = 0;
$rightIdx = count($arr) - 1;
while ($leftIdx <= $rightIdx) {
$midIdx = intval(($leftIdx + $rightIdx)/2); // 确定中间值索引
if ($target == $arr[$midIdx]) { // 招到了
return ['idx' => $midIdx, 'value' => $target];
} elseif ($target < $arr[$midIdx]) { // 取左边
$rightIdx = $midIdx - 1;
} else {
$leftIdx = $midIdx + 1;
}
}
return []; // 没找到
}