算法设计思想:
如果左侧小于右侧:
如果关键字小于中间值,则从左侧递归查找;
如果关键字大于中间值,则从右侧递归查找;
如果关键字等于关键字,则返回关键字。
否则查找失败。
代码实现:
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int binsearch(int a[],int s,int e,int k)
{
int low=s;
int high=e;
if(s<=e)
{
int mid=(low+high)/2;
if(k<a[mid])
return binsearch(a,low,mid-1,k);
else if(k>a[mid])
return binsearch(a,mid+1,high,k);
else if(k==a[mid])
return k;
}
return 0;
}
int main()
{
int a[100001];
int n,i,m;
while(cin>>n)
{
for(i=0;i<n;i++)
{
cin>>a[i];
}
cin>>m;
if(binsearch(a,0,n,m)!=0)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}
Problem Description
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.
Input
本题多组数据,首先输入一个数字n(n>=100000),然后输入n个数,数据保证数列递增,然后再输入一个查找数字。
Output
若存在输出YES,不存在输出NO.
Example Input
4 1 3 5 8 3
Example Output
YES