二分查找又称折半查找,是一种效率比较高的查找算法,但是它也有它的局限,即线性表必须采用顺序存储结构,而且表中元素按关键字有序排
实现原理:
假设表中元素是按升序排列,取表中间位置记录的元素与要查找的元素比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的元素大于查找元素,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
PHP实现代码如下
<?php
/*
二分查找法
*/
$arr = [1,5,6,7,8,11,22,44,55,56];
var_dump(binarysearch($arr,11));
function binarysearch($arr,$X) {
$left = 0;
$right = count($arr)-1;
while($left<=$right) {
$mid = floor(($left+$right)/2);
if ($X < $arr[$mid]) {
$right = $mid-1;
} elseif ($X > $arr[$mid]) {
$left = $mid+1;
} elseif ($X = $arr[$mid]) {
return $mid+1;
}
}
return -1;//代表找不到
}