二分法(递归非递归)

递归:

#include <iostream>    
using namespace std;

bool binary(int *arr,int low,int high,int flag,int &temp)
{
    int middle;
    if(low>high)
        return false;
    middle=(low+high)/2;
    if(arr[middle]==flag) 
    {
        temp=middle;
        return true;
    } 
        
    if(arr[middle]<flag)   
         return binary(arr,middle+1,high,flag,temp);
    else                   
        return binary(arr,low,high-1,flag,temp);             
}

int main()
{
    while(1)
    {
        int arr[100];
        for(int i=0;i<10;i++)
            cin>>arr[i];
        int temp;
        int abc;
        cout<<"输入要查找的数:(限定了十个数)"<<endl;
        cin>>abc;
        if( binary(arr,0,9,abc,temp) )
        {
            if(arr[temp]==abc)
                cout<<"二分查找成功"<<endl;    
        }     
    }
    return 0;
}

非递归:

#include <iostream>    //二分法非递归实现。 
#include <algorithm>
using namespace std;

int arr[100];
int temp;

bool binary(int low,int high,int &ans)
{
    while(low<=high)
    {
        int middle=(low+high)/2;
        if(arr[middle]==temp)
        {
            ans=middle;
            return true;    
        }
        if(arr[middle]<temp)
            low=middle+1;
        if(arr[middle]>temp)
            high=middle-1;    
    }    
    return false;

int main()
{
    int n;
    cout<<"请输入n"<<endl;
    while(cin>>n)
    {
        cout<<"请输入数组中的数(按照顺序输入)"<<endl;
        for(int i=0;i<n;i++)
            cin>>arr[i];
        cout<<"请输入要查找的数据"<<endl;
        cin>>temp;                    
        int ans;
        if(binary(0,n-1,ans))
        {
            cout<<"要查找的数据在第"<<ans+1<<"个"<<endl; 
        }
        else 
            cout<<"没找到。"<<endl;
    }     
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_40799464/article/details/81506308