数据结构上机实验之二分查找
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2039
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.
输入
本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。
输出
若存在输出YES,不存在输出NO.
示例输入
4 1 3 5 8 3
示例输出
YES
提示
代码:
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 int f[5000000]; 5 int binsearch(int l,int e,int key); 6 int binsearchx(int l,int e,int key); 7 int main() 8 { 9 int n; 10 while(cin>>n) 11 { 12 int i; 13 for(i=1;i<=n;i++) 14 cin>>f[i]; 15 int key; 16 cin>>key; 17 int flag=-1; 18 //flag=binsearch(1,n,key); 19 flag=binsearchx(1,n,key); 20 if(flag==-1)cout<<"NO"<<endl; 21 else cout<<"YES"<<endl; 22 } 23 return 0; 24 } 25 int binsearch(int e,int l,int key)//二分查找非递归算法 26 { 27 int low=1,high=l; 28 int mid; 29 while(low<=high) 30 { 31 mid=(low+high)/2; 32 if(f[mid]==key)return mid; 33 else if(key<f[mid])high=mid-1; 34 else low=mid+1; 35 } 36 return -1; 37 } 38 int binsearchx(int e,int l,int key)//二分查找递归算法 39 { 40 int mid=(e+l)/2; 41 if(f[mid]==key)return mid; 42 else if(f[mid]>key)return binsearch(e,mid-1,key); 43 else if(f[mid]<key)return binsearch(mid+1,l,key); 44 return -1; 45 }