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

  • Post author:
  • Post category:其他


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



版权声明:本文为liubaoli1989原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。