PHP如何查詢一列有序陣列是否包含某值(二分查詢)

2022-03-12 16:07:21 字數 1177 閱讀 1566

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

思路:判斷是否存在,最簡單是,直接迴圈該陣列,對每乙個值進行比較。但是對於有序陣列來說,這樣寫就完全沒有利用好「有序」這一特點。

所有我們使用到「二分法查詢」,

//

有序陣列為

$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 '';

var_dump($ren

);function find($arr, $str

)

if($str > $arr[$mid

])

if($str

< $arr[$mid

]) }

return

false

;}

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

PHP獲取陣列中指定的一列例項

對於乙個多維陣列 以二維陣列為例 經常需要獲取到其中的一列,比如有幾條使用者資料,是乙個二維陣列,現在需要獲取到這幾個使用者的名字,可以有多種方法實現 程式設計客棧 arr array array id 101 name qu age 28 array id 102 name you age 24 ...

PHP合併陣列,每組有有一列用來對比

ele cash model col ele cash siteid,begin time,end time 獲取電子面單現結資訊 ele customer model col ele customer siteid,begin time,end time 獲取電子面單客戶月結資訊 papre ca...

劍指offer 查詢二維有序陣列中是否含有某整數

二維陣列轉化成指標 int matrix 4 其中matrix 4 和 int matrix等價 bool isture sol.findtwodimention int matrix,4,4,70 面試題4 二維陣列中的查詢 題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按 ...