php實現二分尋找演算法的方法

來源:互聯網
上載者:User
這篇文章主要介紹了PHP二分尋找演算法的實現方法,簡單分析了二分尋找演算法的原理,並結合具體執行個體形式給出了php基於迴圈與遞迴兩種方法實現二分尋找的相關操作技巧,需要的朋友可以參考下

本文執行個體講述了PHP二分尋找演算法的實現方法。分享給大家供大家參考,具體如下:

二分尋找法需要數組是一個有序的數組

假設我們的數組是一個遞增的數組,首先我們需要找到數組的中間位置.

1. 要知道中間位置就需要知道起始位置和結束位置,然後取出中間位置的值來和我們的值做對比。

2. 如果中間值大於我們的給定值,說明我們的值在中間位置之前,此時需要再次二分,因為在中間之前,所以我們需要變的值是結束位置的值,此時結束位置的值應該是我們此時的中間位置。

3. 反之,如果中間值小於我們給定的值,那麼說明給定值在中間位置之後,此時需要再次將後一部分的值進行二分,因為在中間值之後,所以我們需要改變的值是開始位置的值,此時開始位置的值應該是我們此時的中間位置,直到我們找到指定值。

4. 或者中間值等於最初的起始位置,或結束位置(此時說明給定值未找到),下面我們來用代碼實現~


//迴圈實現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;}


//遞迴實現/** 從數組中擷取元素值* @param1 int $num,要尋找的目標值* @param2 array $arr,要尋找的數組* @param3 int $start,尋找的起始位置* @param4 int $end,尋找的結束位置* @return mixed,找到了返回位置,沒找到返回false*/function getValue4($num,$arr,$start = 0,$end = 100){    //採用二分法尋找    $middle = floor(($end + $start) / 2);    //判斷    if($arr[$middle] == $num){      //已經找到了,遞迴的出口      return $middle + 1;    }elseif($arr[$middle] < $num){      //要尋找的元素在數組的後半段      $start = $middle + 1;      //邊界值      if($start >= $end){        //沒有找到,但是已經超出邊界值,遞迴出口        return false;      }      //調用自己去尋找:遞迴點      return getValue4($num,$arr,$start,$end);  //getValue4($num,$arr,51,100)    }else{      //要尋找的元素在數組的前半段      $end = $middle - 1;      //判斷邊界值      if($end < 0)return false;      //調用自己:遞迴點      return getValue4($num,$arr,$start,$end);  //getValue4($num,$arr,0,49)    }    //都沒有找到    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.