已知乙個排序陣列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到陣列最後乙個元素 下標是陣列長度減...