有關二分查找的概念與例子:
什麼是二分查找
二分查找也稱折半查找(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
)。
結果截圖:

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