PHP簡單的數組尋找演算法分享

來源:互聯網
上載者:User
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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.