采用递归算法,递归调用本身
不断把给定数组分为两半,并确定待查找元素key属于哪一半,并在其所属的那一半里继续查找,直到找到待查找元素,如果找不到,即第N次分的数组只有一个元素时,输出NO。
注意,给定数组元素是已经按从小到大的顺序排好序的。
#include <iostream>
using namespace std;
int m,n;
int a[10000],b[50000];
void search(int start,int end,int key)
{
if(start==end)
cout<<"NO"<<endl;
else if(a[start]==key||a[end]==key)
cout<<"YES"<<endl;
else{
int mid=(start+end)/2;
if(a[mid]==key)
cout<<"YES"<<endl;
else if(a[mid>key]) //起始,终止和中间元素都不等于key值,则看key在哪个范围内,在划分好的范围内再找
search(start,mid,key);
else
search(mid+1,end,key);
}
}
int main()
{
int i,j;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
cin>>m;
for(j=0;j<m;j++)
cin>>b[j];
for(j=0;j<m;j++) //一个一个查找待查元素
search(0,n-1,b[j]);
return 0;
}