欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

二分法(递归非递归)

发布时间:2024/10/14 编程问答 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 二分法(递归非递归) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

递归:

#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;
}

总结

以上是生活随笔为你收集整理的二分法(递归非递归)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。