本文實例講述了PHP二分查找算法。分享給大家供大家參考,具體如下:
binarySearch
二分查找采用的方法比較容易理解,以數組為例:
① 先取數組中間的值floor((low+top)/2),
② 然后通過與所需查找的數字進行比較,若比中間值大,則將首值替換為中間位置下一個位置,繼續第一步的操作;若比中間值小,則將尾值替換為中間位置上一個位置,繼續第一步操作
③ 重復第二步操作直至找出目標數字
比如從1,3,9,23,54 中查找數字23,
首位置為0, 尾位置為4,中間位置就為2 值為9,比23小,則首位置更新為2+1即3;那么接下來中間位置就為(3+4)/2=3,值為23,比較相等即找到
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 非遞歸算法: // $target是要查找的目標 $arr是已經排序好的數組 function binary(& $arr , $low , $top , $target ){ while ( $low <= $top ){ //由于php取商是有小數的,所以向下取整,不過也可不加,數組也會取整 $mid = floor (( $low + $top )/2); echo $mid . "<br>" ; if ( $arr [ $mid ]== $target ){ return $arr [ $mid ]; } elseif ( $arr [ $mid ]< $target ){ $low = $mid +1; } else { $top = $mid -1; } } return -1; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 遞歸算法: function binaryRecursive(& $arr , $low , $top , $target ){ if ( $low <= $top ){ $mid = floor (( $low + $top )/2); if ( $mid == $target ){ return $arr [ $mid ]; } elseif ( $arr [ $mid ]< $target ){ return binaryRecursive( $arr , $mid +1, $top , $target ); } else { return binaryRecursive( $arr , $low , $top -1, $target ); } } else { return -1; } } |
希望本文所述對大家PHP程序設計有所幫助。