資料結構查詢演算法(二分查詢)

2021-10-08 18:15:57 字數 1513 閱讀 8432

參考例子

後記:二分查詢演算法,說白了就是在有序的陣列裡面給予乙個存在陣列裡面的值key,然後將其先和陣列中間的比較,如果key大於中間值,進行下一次mid後面的比較,直到找到相等的,就可以得到它的位置。

首先確定整個查詢區間的中間位置mid = strat+(end-strat)/2

用待查關鍵字key值與中間位置的關鍵字值進行比較;

若相等,則查詢成功

若key小於a[k],則在前(左)半個區域繼續進行折半查詢

若key大於a[k],則在後(右)半個區域繼續進行折半查詢

對確定的縮小區域再按折半公式,重複上述步驟。

二分查詢目的是在一堆數中找到指定的數。

使用二分查詢這些資料需要有的特徵(面試容易問):

儲存在陣列中。有序的排列。

如果是鍊錶就無法使用二分查詢。

順序陣列是遞增遞減,是否有重複的資料沒有關係。

折半查詢,遞迴實現(模板)

/*折半查詢,遞迴實現*/  

templateint binary_search(t *x, int n, t keyword)

return -1;

}

折半查詢,遞迴實現

/*折半查詢,遞迴實現*/  

int binarysearch(int *arr , int low , int high , int target)//遞迴實現

;

/**

* 二分查詢普通實現。

* @param srcarray 有序陣列

* @param key 查詢元素

* @return 不存在返回-1,存在返回對應的陣列下標

*/int binarysearch1(int a, int n , int target)//迴圈實現

while(low < high)

return -1;

};

#includeusing namespace std;

int binarysearch(int *arr , int low , int high , int target)//遞迴實現;

int binarysearch1(int a, int n , int target)//迴圈實現

return -1;};

int main()

; int index = binarysearch( a , 0 , 9 , 12);

cout查詢和排序都是在程式設計中經常用到的演算法,查詢相對而言較為簡單,不外乎順序查詢、二分查詢、雜湊表查詢和二叉排序樹查詢。

在面試的時候,不管是用迴圈還是用遞迴,面試官都期待應聘者能夠信手拈來寫出完整的二分查詢**,否則可能連繼續面試的興趣都沒有。

以上兩句話引出自《劍指offer:名企面試官精講典型面試題》

資料結構 二分查詢演算法

1.請自行學習二分查詢演算法,並實現以下函式 1.1 在乙個已排序的整型陣列array中,假設已知array陣列的元素個數為n,需要查詢的關鍵值為key,要求在array陣列中查詢值為key的數字,並返回該數字在陣列中對應的索引值。請設計並實現該函式。include int bsearch1 int...

資料結構 二分查詢(演算法)

二分查詢要求陣列必須有序,如果陣列無序,需對陣列進行排序操作 首先確定陣列中間值的下標 mid left right 2 讓需要查詢的值findvalue與arr mid 進行比較 1 如果無它要求,直接返回mid即可 2 如果需要查詢第乙個元素位置,需要向左迴圈,查詢mid前面是否還有滿足需求的值...

資料結構 二分查詢

二分查詢演算法也稱為折半搜尋 二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為...