分治演算法 二分查詢遞迴 非遞迴

2021-08-26 05:48:22 字數 1363 閱讀 4646

二分查詢,在乙個有序的陣列中,查詢某個元素。

比如:有序陣列array(1,3,4,5,7,9,10),查詢9。

問題分析:將陣列分成左右兩個陣列,查詢mid值。如果mid值 > 9 ,從左邊陣列查詢,如果 <9 從右邊查詢。

分解過程:

1 mid = (0 + 6 ) / 2 = 3 ,查詢mid=3的值,是5。

2 5 != 9,將陣列分成(1,3,4,5),(7,9,10)

3 5 < 9 ,從右側查詢(7,9,10)

在(7,9,10)中查詢,9,重複1,2,3步驟

<?php

function

search

($val

,$start

,$end

,$data

)$mid=(

$start

+$end)/

2;if(

$data

[$mid]==

$val

)//查詢左邊if(

$data

[$mid

]>

$val

)//查詢右邊

return

search

($val

,$mid+1

,$end

,$data);

}$data

=array(1

,3,4

,5,7

,9,10

);$idx

=search(1

,0,count

($data)-

1,$data);

print_r

($idx);

echo

"\n"

;$idx

=search

(123,0

,count

($data)-

1,$data);

print_r

($idx

);

主要通過while模擬遞迴的過程

<?php

function

search

($val

,$data)if

($data

[$mid

]>

$val

)else

}return

$idx;}

$data

=array(1

,3,4

,5,7

,9,10

);$idx

=search(7

,$data);

echo

",\n"

;?>

二分查詢演算法(遞迴 非遞迴)

二分查詢 binary search 先來個比較官方的解釋 二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如...

二分查詢演算法(遞迴 非遞迴)

二分查詢是針對有序序列來說的,在有序序列中使用二分查詢能大大提高查詢效率。首先確定整個查詢區間的中間位置 mid 用待查關鍵字key值與中間位置的關鍵字值進行比較 若相等,則查詢成功 若大於,則在後 右 半個區域繼續進行折半查詢 若小於,則在前 左 半個區域繼續進行折半查詢 對確定的縮小區域再按折半...

遞迴 分治策略 二分查詢的遞迴與非遞迴

規模問題 分治策略,將乙個難以解決的規模大的問題,分解成一些規模較小的相同問題 includeusing namespace std int fac unsigned int n 用遞迴解決階乘 int fun unsigned int n 用迴圈解決階乘 return sum int main e...