PHP中對於數組的尋找可以用順序尋找或二分法尋找。其中順序尋找比較簡單,就是逐個比較尋找。但缺點也較明顯,如果尋找的元素恰巧在最後一個,迴圈的次數過多。
1.順序尋找演算法描述
在數組中逐個尋找,確認是否有某個元素,存在時返回元素的位置資訊。可以設定標誌資訊,初始值為false.找到直接輸出位置,並將標誌設定為true。迴圈結束標誌仍為false,則沒有找到。
代碼體現:
$arr =[123,19,38,29,10,34];function search($arr,$target){ // 參數:目標數組 目標元素foreach ($arr as $key => $value) {if($value == $target){return $key.'<br>';}}return false;}
2.二分法尋找演算法描述
假設數組嚴格升序。如果目標元素大於中間的值,尋找範圍向右側縮小一半。如果目標元素的值小於中間元素的值,尋找範圍向左側縮小一半。
代碼體現:
function half_search($arr,$target){// 定義出初始的第一個,最後一個元素的下標範圍$len = count($arr);$left =0;$right =$len -1;// 迴圈尋找// 範圍不斷的移動 ,必須滿足一個條件// 最左側元素的下標 小於等於右側元素的下標while($left <= $right){ // 中間元素的下標 $middle = floor(($left + $right) /2); // 目標元素與中間元素進行比較 if($target == $arr[$middle]){ return $middle; } // 如果目標元素小於中間元素 // 範圍向左縮小一半 if($target < $arr[$middle]){ $right =$middle-1 ; } // 如果目標元素大於中間元素 // 範圍向右縮小一半 if($target > $arr[$middle]){ $left = $middle + 1; }} // 迴圈終止了 // 沒有找到 return false;}