基于递归的折半查找
#include<iostream>
#include <vector>
using namespace std;
int flag = 0;
void midSearch(vector<int>& v,int start,int end,int x){
if(start <= end){
int mid = (start + end) / 2;
if(v[mid] == x)
{
flag = 1;
return ;
}else if(x > v[mid]){
return midSearch(v,mid+1,end,x);
}else{
return midSearch(v,start,mid -1,x);
}
}
return ;
}
int main(){
int n;
while(cin>>n&& n!=0){
vector<int>v;
for(int i = 1;i<=n;i++){
int x;
cin>>x;
v.push_back(x);
}
int s;
cin >> s;
midSearch(v,0,v.size() - 1,s);
if(flag == 1){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
flag = 0;
}
return 0;
}