天天看點

二分查找法(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代碼)

上面為數組的内部資料。

下面為查詢結果(靈活更改内容,可檢視自己所需的效果)。