数据结构上机实验之二分查找
Time Limit: 1000MS Memory limit: 65536K
题目描述
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.
输入
本题多组数据,首先输入一个数字n(n>=100000),然后输入n个数,数据保证数列递增,然后再输入一个查找数字。
输出
若存在输出YES,不存在输出NO.
示例输入
4 1 3 5 8 3
示例输出
YES
代码如下,今天写了一下,很简单
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int a[1000000]; int main() { int n,i; int k; int key,mid,low,high; while(scanf("%d",&n)!=EOF) { int k=-1; low=1; high=n; for(i=1;i<=n;i++) { scanf("%d",&a[i]); } scanf("%d",&key); while(low<=high) { mid=(low+high)/2; if(key==a[mid]) { k=mid; break; } else if(key<a[mid]) { high=mid-1; } else if(key>a[mid]) { low=mid+1; } } if(k!=-1) { printf("YES\n"); } else { printf("NO\n"); } } return 0; }