1. 程式人生 > >C語言版二分查詢演算法

C語言版二分查詢演算法

二分查詢演算法是在有序陣列中用到的較為頻繁的一種演算法,在未接觸二分查詢演算法時,最通用的一種做法是,對陣列進行遍歷,跟每個元素進行比較,其時間為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) return
middle; //在左半邊 else if(a[middle] > goal) high = middle - 1; //在右半邊 else low = middle + 1; } //沒找到 return -1; }