您的位置:首页 > 其它

1001 二分查找

2015-08-03 12:04 417 查看
采用递归算法,递归调用本身

不断把给定数组分为两半,并确定待查找元素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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: