本文主要介紹了PHP實現的二分查找演算法,結合實例形式分析了二分查找演算法的原理與循環、遞歸等實現技巧,需要的朋友可以參考下,希望能幫助到大家。
二分查找法需要數組是一個有序的數組
假設我們的數組是一個遞增的數組,首先我們需要找到數組的中間位置.
一。要知道中間位置就需要知道起始位置和結束位置,然後取出中間位置的值來和我們的值做比較。
二。如果中間值大於我們的給定值,表示我們的值在中間位置之前,此時需要再次二分,因為在中間之前,所以我們需要變的值是結束位置的值,此時結束位置的值應該是我們此時的中間位置。
三。反之,如果中間值小於我們給定的值,那麼說明給定值在中間位置之後,此時需要再次將後一部分的值進行二分,因為在中間值之後,所以我們需要改變的值是開始位置的值,此時開始位置的值應該是我們此時的中間位置,直到我們找到指定值。
四。或中間值等於最初的起始位置,或結束位置(此時說明給定值找不到),以下我們來用程式碼實作~
//循环实现 function getValue($num,$arr) { //查找数组的中间位置 $length=count($arr); $start=0; $end=$length; $middle=floor(($start+$end)/2); //循环判断 while($start>$end-1) { if($arr[middle]==$num) { return middle+1; }elseif($arr[middle]<$num) { //如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段 //所以起始位置变成当前的middle的值,end位置不变。 $start=$middle; $middle=floor(($start+$end)/2); }else{ //反之 $end=$middle; $middle=floor(($start+$end)/2); }} return false; }
//循环实现 function getValue($num,$arr) { //查找数组的中间位置 $length=count($arr); $start=0; $end=$length; $middle=floor(($start+$end)/2); //循环判断 while($start>$end-1) { if($arr[middle]==$num) { return middle+1; }elseif($arr[middle]<$num) { //如果当前要查找的值比当前数组的中间值还要打,那么意味着该值在数组的后半段 //所以起始位置变成当前的middle的值,end位置不变。 $start=$middle; $middle=floor(($start+$end)/2); }else{ //反之 $end=$middle; $middle=floor(($start+$end)/2); }} return false; }
相關推薦:
以上是實例分析PHP實現的二分查找演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!