二分法查找的實現

二分法查找的前提是數據是有序的,時間複雜度是O(log2n)

沒有什麼難點,寫的太多了,直接上代碼:

#include <stdio.h>

int BSearch(int a[], int x, int low, int high)
{
    if(low < high)
        return -1;
    int mid = (low+high)/2;
    
    if(x==a[mid]) return mid;
    else if(x<a[mid])
        return BSearch(a, x, low, mid);
    else
        return BSearch(a, x, mid+1, high);
}
void main()
{
    int a[] = {1,3,4,5,6,2};
    int x = 4;
    int bn = BSearch(a, x, 0, 6);
    if(bn)
        printf("finded\n");
}

非遞歸實現也很簡單:

int binary_search(int a[], int l, int r, int x)
{
    int mid = (l + r)/2;
    while(l <= r && a[mid] != x)
    {   
        if(a[mid] < x)
            l = mid+1;
        else if(a[mid] > x)
            r = mid-1;
        mid = (l+r)/2;
    }   
    if(x == a[mid]);
    {   
        printf("the num is in the position:%d\n",mid); 
        return mid;
    }   
    return -1; 
}


發佈了39 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章