二分查詢的遞迴和非遞迴實現

2021-10-01 18:56:27 字數 1732 閱讀 9044

已知乙個排序陣列a,如a = [-1,2,5,20,90,100,207,800]

另外乙個亂序陣列b,如b = [50,90,3,-1,207,80]

求b中的任意某個元素,是否在a**現,結果儲存在陣列c中,出現用1表示,未出現用0表示,如,c = [0,1,0,1,1,0]

二分查詢又稱折半查詢,首先,假設表中元素是按公升序排列,將中間位置的關鍵字與查詢關鍵字比較

1、如果兩者相等,則查詢成功

2、否則利用中間位置將表分成前、後兩個子表

1)如果中間位置的關鍵字大於查詢關鍵字,則進一步查詢前一子表

2)否則進一步查詢後一子表

重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

遞迴實現,**如下:

#include

bool

binary_search

(vector<

int>

& sort_array,

int begin,

int end,

int target)

int mid =

(begin + end)/2

;if(target == sort_array[mid]

)else

if(target < sort_array[mid]

)else

if(target > sort_array[mid]

)}

非遞迴實現,**如下:

bool

binary_search

(vector<

int>

& sort_array,

int target)

else

if(target < sort_array[mid]

)else

if(target > sort_array[mid])}

return

false

;}

vector<

int>

search_array

(vector<

int>

& sort_array, vector<

int>

& random_array)

return result;

}int

main()

;int b=

; vector<

int> sort_array;

vector<

int> random_array;

vector<

int> c;

for(

int i =

0; i <

8; i++

)for

(int i =

0; i <

6; i++

) c =

search_array

(sort_array, random_array)

;for

(int i =

0; i < c.

size()

; i++

)return0;

}

二分查詢實現(遞迴和非遞迴)

遞迴的二分查詢,查詢單個值 時間複雜度 log2n 有點像二叉排序樹的查詢 param arr 待查詢陣列,有序 param low param high param findval 待找值 return 待找值的下標,沒有返回 1 public static intbinarysearch int...

二分查詢 非遞迴實現和遞迴實現

二分查詢 演算法思想 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。二分查詢的前提是這個陣列是有序的...

二分查詢 非遞迴實現和遞迴實現

二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。先說一下二分查詢的思路 乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid 1,後一半從mid 1到陣列最後乙個元素 下標是陣列長度減...