二分查找的遞歸和非遞歸實現

// 輸入:先輸入進行二分搜索元素的個數,然後按大小依次輸入(或隨機生成,然後排序)每個數字,最後輸入要求搜索的元素。
輸出:要求搜索元素的下標(下標從0開始!)。
示例:輸入:6 1 5 5 6 9 9 6,輸出3

#include <iostream>  
using namespace std;

//遞歸
int search(int arr[],int l,int r,int key)
{
    int min = (l + r) / 2;
    if (key==arr[min])
    {
        return min;
    }
    else if (key<arr[min])
    {
        return search(arr,l,min-1,key);
    }
    else if (key>arr[min])
    {
        return search(arr, min + 1, r, key);
    }
    else
    {
        return -1;
    }
}

//非遞歸
/*int search(int arr[], int l, int r, int key)
{

    while (l<=r)
    {
        int min = (l + r) / 2;
        if (key == arr[min])
        {
            return min;
        }
        else if (key<arr[min])
        {
            r = min - 1;
        }
        else if (key>arr[min])
        {
            l = min + 1;
        }
        else
        {
            return -1;
        }
    }

}*/
int main()
{
    int n;//個數
    cin >> n;
    int *arr = new int[n];//大小爲n的數組
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
    }
    int key;//要搜索的元素
    cin >> key;
    cout<<search(arr,0,n-1,key);
    delete[] arr;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章