一.引入:
假設乙個已經[排好序的陣列a[n] ,若要搜尋其中某個元素x,一般想到的是逐個查詢,倘若x剛好在a[n],則最壞的情況需要n次比較,如若x不在陣列a中,則更加得不償失.
二分查詢作為乙個典型的分支策略,實現了對n個排好序的陣列進行折半查詢,每次取a[n/2]和x比較,找到則返回下標, 如果a[n/2]>x,由於是排好序的陣列,則下一趟直接在0-n/2之間查詢,else在a[n/2]-n查詢.
二.函式:
//非遞迴查詢
int binsearch(char *a,int n,const char &x) //二分查詢,前提查詢序列是有序排列
三.程式**:
#includeusing namespace std;
int binsearch(char *a,int n,const char &x) //二分查詢,前提查詢序列是有序排列
int main()
; char c='g';
int x;
cout<
for (int i = 0; i < 8; i++)
{ cout<
可以看出,每次比較搜尋陣列都會減少一半.最好情況就是mid即為x,不用說時間複雜度為o(1)
假設n為8 折半剩下4 再折半剩下2 再折半剩下1 即 2^3= 8
最壞的情況下,時間複雜度為 log2n
四.執行結果:
二分查詢演算法(遞迴 非遞迴)
二分查詢 binary search 先來個比較官方的解釋 二分搜尋 英語 binary search 也稱折半搜尋 英語 half interval search 對數搜尋 英語 logarithmic search 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜尋過程從陣列的中間元素開始,如...
二分查詢演算法(遞迴 非遞迴)
二分查詢是針對有序序列來說的,在有序序列中使用二分查詢能大大提高查詢效率。首先確定整個查詢區間的中間位置 mid 用待查關鍵字key值與中間位置的關鍵字值進行比較 若相等,則查詢成功 若大於,則在後 右 半個區域繼續進行折半查詢 若小於,則在前 左 半個區域繼續進行折半查詢 對確定的縮小區域再按折半...
二分查詢 遞迴與非遞迴
最近做了一道題目,在弄清原理之後發現怎麼也過不去,找了幾個小時的bug,結果問題就出現在二分查詢的知識點上,暑假是有接觸過二分的題目,應該是沒有完全理解才會在昨天的那道題上碰釘子,藉此寫一下對二分的理解來鞏固鞏固以前的知識。一談起查詢,最先想到的無非是遍歷整組資料,複雜度為o n 但是對於一組有規律...