二分查找经典题型
1 #include<stdio.h> 2 int binserch(int a[],int s,int t,int key) 3 { 4 int low=s,high=t,mid; 5 if(s<=t) 6 { 7 mid=low+(high-low)/2; 8 if(a[mid]==key) 9 { 10 return mid; 11 } 12 if(a[mid]>key) 13 return binserch(a,low,mid-1,key); 14 else return binserch(a,mid+1,high,key); 15 } 16 return -1; 17 } 18 int main() 19 { 20 int m; 21 while(~scanf("%d",&m)) 22 { 23 int f[100002],n,i; 24 for(i=1;i<=m;i++) 25 scanf("%d",&f[i]); 26 scanf("%d",&n); 27 if(binserch(f,1,m,n)!=-1)printf("YES\n"); 28 else printf("NO\n"); 29 } 30 return 0; 31 }
数据结构上机实验之二分查找
Time Limit: 1000MS Memory limit: 65536K
题目描述
在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.
输入
本题多组数据,首先输入一个数字n,然后输入n个数,数据保证数列递增,然后再输入一个查找数字。
输出
若存在输出YES,不存在输出NO.
示例输入
4 1 3 5 8 3
示例输出
YES
提示
1 #include<stdio.h> 2 int binserch(int a[],int s,int t,int key) 3 { 4 int low=s,high=t,mid; 5 if(s<=t) 6 { 7 mid=low+(high-low)/2; 8 if(a[mid]==key) 9 { 10 return mid; 11 } 12 if(a[mid]>key) 13 return binserch(a,low,mid-1,key); 14 else return binserch(a,mid+1,high,key); 15 } 16 return -1; 17 } 18 int main() 19 { 20 int m; 21 while(~scanf("%d",&m)) 22 { 23 int f[100002],n,i; 24 for(i=1;i<=m;i++) 25 scanf("%d",&f[i]); 26 scanf("%d",&n); 27 if(binserch(f,1,m,n)!=-1)printf("YES\n"); 28 else printf("NO\n"); 29 } 30 return 0; 31 }