二分查找:
要么左边,要么右边,哈哈哈哈
描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
输出
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
输入样例
5
1 3 4 7 11
3
3
6
9
1 3 4 7 11
3
3
6
9
输出样例
Yes
No
No
No
No
代码实现如下:
#include <stdio.h> int n; int binarySearch(int a[],long key) { int left = 0; int right = n; while(left<=right) { int mid = (left+right)/2; if(a[mid]==key) { return mid; } else if(a[mid]<key) { left = mid+1; } else { right = mid - 1; } } return -1; } int main() { int array[10001]; int i; int m; long q; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&array[i]); scanf("%d",&m); while(m--) { scanf("%ld",&q); if(binarySearch(array,q)>=0) printf("Yes "); else printf("No "); } return 0; }