二分查找,遞歸與非遞歸實現

每次經理帶我去面試別人,都會問一個二分查找的算法,我用慣了STL的算法,對於這些算法怎麼實現,很少關注,但是他老是問這個。。。我就好奇了,反正閒來無事,看看怎麼寫吧。

#include <iostream>  
using namespace std;  
  
int digui_search(int arr[], int start , int end, int key){  
  
    if (start >= end)  
        return -1;  
  
    int mid = (start + end) / 2;  
    if (arr[mid] == key)  
        return mid;  
    if (arr[mid] < key)  
        return search(a, mid + 1, end, key);  
    else  
        return search(a, start, mid - 1, key);  
}  
  
  
  
int diedai_search(int arr[], int start, int end, int key){  
    while (start <= end){  
        int mid = (start + end) / 2;  
        if (arr[mid] == key)  
            return mid;  
        else{  
            if (arr[mid] > key)  
                end = mid - 1;  
            else  
                start = mid + 1;  
        }  
    }  
    return - 1;  
}  
  
  
int main()  
{  
    int arr[5] = { 3, 8, 11, 22, 33 };  
  
    cout << digui_search(arr, 0, 4, 22) << endl;  
  
    cout << diedai_search(arr, 0, 4, 8) << endl;  
  
    return 0;  
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章