有关二分查找的概念与例子:
什么是二分查找
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
二分查找的要求:
1:必须采用循序储存结构。
2:必须按关键字大小有序排列。
案例主题代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
//二分查找法,高效查找数据
function erfen($arr,$value,$start,$end)
{
if($start > $end)
{
return false;
}
$mid = floor(($start + $end)/2);
$zhong = $arr[$mid];
if($value == $zhong)
{
return true;
}
elseif($value > $zhong)
{
$new_start = $mid + 1;
$new_end = $end;
return erfen($arr,$value,$new_start,$new_end);
}else
{
$new_start = $start;
$new_end = $mid - 1;
return erfen($arr,$value,$new_start,$new_end);
}
}
$arr = array(1,2,3,4,5,76,86,87,89,94);
echo "<pre>";
print_r($arr);
echo "</pre>";
$search = 93;
$len = count($arr);
$result = erfen($arr,$search,0,$len -1);
if($result)
{
echo "您输入的数据为:".$search."<br>找到数据";
}
else
{
echo "您输入的数据为:".$search."<br>没有找到数据";
}
?>
</body>
</html>
解释:
函数第10行中定义了四个形参(
$arr
为查找的数组,
$value
你想要在数组中查找的数值 ,
$start
开始范围的下标 ,
$end
结束范围的下标)。
第12行第一个if判断(当开始的下标大于结束的下标时返回false,从函数中出来)。
第16行
$mid
求出每次的中间值的下标,
$zhong
为中间值。
第18行,当你想要找的值正好是中间值。
第22行,你找的值大于中间值时,得到一个新的起始下标(
$new_start
),它就等于原来的中间下标加一,结束下标还是原来的结束下标(
$end
,为了方便查看,我将它赋值给了
$new_end
)。
第28行,你找的值小于中间值时,得到一个新的结束下标(
$new_end
),它就等于原来的中间下标减一,起始下标还是原来的起始下标(
$start
,为了方便查看,我将它赋值给了
$new_start
)。
结果截图:

上面为数组的内部数据。
下面为查询结果(灵活更改内容,可查看自己所需的效果)。