二分查找算法是在有序數組中用到的較爲頻繁的一種算法,在未接觸二分查找算法時,最通用的一種作法是,對數組進行遍歷,跟每一個元素進行比較,其時間爲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,即找到了。html
二分查找算法就是不斷將數組進行對半分割,每次拿中間元素和goal進行比較。ios
1 #include <iostream> 2 using namespace std; 3 4 //二分查找 5 int binary_search(int* a, int len, int goal); 6 7 int main() 8 { 9 const int LEN = 10000; 10 int a[LEN]; 11 for(int i = 0; i < LEN; i++) 12 a[i] = i - 5000; 13 int goal = 0; 14 int index = binary_search(a, LEN, goal); 15 16 if(index != -1) 17 cout<<goal<<"在數組中的下標爲"<<binary_search(a, LEN, goal)<<endl; 18 else 19 cout<<"不存在"<<goal<<endl; 20 return 0; 21 } 22 23 int binary_search(int* a, int len, int goal) 24 { 25 int low = 0; 26 int high = len - 1; 27 while(low <= high) 28 { 29 int middle = (low + high)/2; 30 if(a[middle] == goal) 31 return middle; 32 //在左半邊 33 else if(a[middle] > goal) 34 high = middle - 1; 35 //在右半邊 36 else 37 low = middle + 1; 38 } 39 //沒找到 40 return -1; 41 }
本文轉自:http://www.cnblogs.com/shuaiwhu/archive/2011/04/15/2065062.html算法