二分查找是比较常用且高效的查找算法,原理是给定一个有序数组和待查找target,利用分治思想进行搜索。
默认数组是升序,时间复杂度O(logn),空间复杂度O(1)
<?php
#二分查找
function BinarySearch(Array $arr, $target) {
$length = count($arr);
if (!is_array($arr)
|| !isset($target)
|| $length < 1) {
return false;
}
$low = 0;
$high = $length - 1;
while($low <= $high) {
$mid = floor(($low + $high) / 2);
if($target == $arr[$mid]) {
return $mid;
}
if($target < $arr[$mid]) {
$high = $mid - 1;
}else if($target > $arr[$mid]) {
$low = $mid + 1;
}
}
return false;
}
$arr = array(1, 3, 5, 7, 9, 11);
$inx = BinarySearch($arr, 1);
var_dump($inx);
?>