算法导论2.3-5答案 分别采用递归与非递归方式实现二分查找 c++实现

21 篇文章 0 订阅
6 篇文章 0 订阅
//2.3-5 采用递归方式的二分查找,注意输入的数组是有顺序的
#include <iostream>
#include <vector>
using namespace std;


vector<int>::size_type Binary_Search(vector<int> A,int key,vector<int>::size_type first,vector<int>::size_type last)
{
        if(first>last)
              return -1;
         vector<int>::size_type mid;
         mid=(first+last)/2;
         if(key==A[mid])
               return mid;
         else
              if(key>A[mid])
                   return Binary_Search(A,key,mid+1,last);
             else
                  return Binary_Search(A,key,first,mid-1);
}


int main()
{
       vector<int> A;
       int x,key;
       cout<<"input the number you want to search:";
       cin>>key;
       cout<<"Please input some numbers:";
       while(cin>>x)
            A.push_back(x);
        vector<int>::size_type i;
        i=Binary_Search(A,key,0,A.size());
        if(i>=0)
            cout<<"We find the number "<<key<<" and it's location is "<<i<<endl;
        else
            cout<<"There is no "<<key<<" in the vector A."<<endl;
}
*/
//采用非递归方式
#include <iostream>
#include <vector>
using namespace std;


vector<int>::size_type Binary_Search(vector<int> A,int key,vector<int>::size_type first,vector<int>::size_type last)
{
         while(first<=last)
        {
              vector<int>::size_type mid;
              mid=(first+last)/2;
              if(key==A[mid])
                   return mid;
              else
                   if(key>A[mid])
                        first=mid+1;
                   else
                        last=mid-1;
        }
         return -1;
}


int main()
{
      vector<int> A;
      int x,key;
      cout<<"input the number you want to search:";
      cin>>key;
      cout<<"Please input some numbers:";
      while(cin>>x)
          A.push_back(x);
       vector<int>::size_type i;
       i=Binary_Search(A,key,0,A.size());
       if(i>=0)
            cout<<"We find the number "<<key<<" and it's location is "<<i<<endl;
       else
            cout<<"There is no "<<key<<" in the vector A."<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值