C語言版二分查詢演算法
阿新 • • 發佈:2019-01-02
二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為O(n).但二分查詢演算法則更優,因為其查詢時間為O(lgn),譬如陣列{1, 2, 3, 4, 5, 6, 7, 8, 9},查詢元素6,用二分查詢的演算法執行的話,其順序為:
1.第一步查詢中間元素,即5,由於5<6,則6必然在5之後的陣列元素中,那麼就在{6, 7, 8, 9}中查詢,
2.尋找{6, 7, 8, 9}的中位數,為7,7>6,則6應該在7左邊的陣列元素中,那麼只剩下6,即找到了。
二分查詢演算法就是不斷將陣列進行對半分割,每次拿中間元素和goal進行比較。
#include <iostream> using namespace std; //二分查詢int binary_search(int* a, int len, int goal); int main() { const int LEN = 10000; int a[LEN]; for(int i = 0; i < LEN; i++) a[i] = i - 5000; int goal = 0; int index = binary_search(a, LEN, goal); if(index != -1) cout<<goal<<"在陣列中的下標為"<<binary_search(a, LEN, goal)<<endl; else cout<<"不存在"<<goal<<endl; return 0; } int binary_search(int* a, int len, int goal) { int low = 0; int high = len - 1; while(low <= high) { int middle = (low + high)/2; if(a[middle] == goal) returnmiddle; //在左半邊 else if(a[middle] > goal) high = middle - 1; //在右半邊 else low = middle + 1; } //沒找到 return -1; }