學習PHP找出一列有序數組是否包含某值的方法

coldplay.xixi
發布: 2023-04-09 13:26:01
轉載
2087 人瀏覽過

學習PHP找出一列有序數組是否包含某值的方法

問題:對於一列有序數組,如何判斷給出的一個值,該值是否存在於數組中。

想法:判斷是否存在,最簡單是,直接循環該數組,對每個值進行比較。但是對於有序數組來說,這樣寫就完全沒有利用好「有序」這一特點。

相關學習推薦:php程式設計(影片)

#所有我們都使用到“二分法查找”,

//有序数组为

$arr = array(2,5,66,87,954,1452,5865);

//查找值

$str = 1452;

//我们先定义 三个参数

$front = 0;//一个开始值下标

$end = count($arr) - 1;//一个结束值下标

$mid = intval(($front + $end) / 2);//中间值下标
登入後複製

1、第一次比較,我們直接判斷查找值str是否等於中間值mid,如果等於直接回傳true;

2、如果查找值str大於中間值mid,則表示查找值str可能在中間值的右邊,即對開始值front需重新賦值= 中間值mid 1,結束值end不用變,依次中間值mid為新的開始值結束值;

3、如果查找值str小於中間值mid,則表示查找值str可能在中間值的左邊,即開始值不用變,結束值end需重新賦值= 中間值- 1,依序中間值mid為開始值新的結束值;

-----如上,對於傳入的開始值,結束值,中間值,進行比較。一旦開始值 大於 結束值 則說明沒有找到,結束查詢,反之等於就回傳已找到。

具體程式碼如下:

$str = 89;//查找值

$arr = [1,55,66,89,420];//有序数组

$ren = find($arr, $str);

echo &#39;<pre class="brush:php;toolbar:false">&#39;;

var_dump($ren);

function find($arr, $str){

 $front = 0;//开始下标

 $end = count($arr) - 1;//结束下标

 while($front <= $end){//结束值 大于 开始值 ,反之则退出

  $mid = intval(($front + $end) / 2);//中间值下标

  if($str == $arr[$mid]){

   return $mid;//存在直接返回值的下标

  }

  if($str > $arr[$mid]){

   $front = $mid + 1;//在前面

  }

  if($str < $arr[$mid]){

   $end = $mid - 1;//在后面

  }

 }

 return false;

}
登入後複製

傳回結果:89為第四個元素值下標3

int(3)

相關學習推薦:程式設計影片

#

以上是學習PHP找出一列有序數組是否包含某值的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:jb51.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板