天天看点

二分查找法(PHP代码)

有关二分查找的概念与例子:

什么是二分查找

二分查找也称折半查找(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

)。

结果截图:

二分查找法(PHP代码)

上面为数组的内部数据。

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