二分查找:
要么左边,要么右边,哈哈哈哈
描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入
第一行为一个整数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 = ;
int right = n; while(left<=right)
{
int mid = (left+right)/;
if(a[mid]==key)
{
return mid;
}
else if(a[mid]<key)
{
left = mid+;
}
else
{
right = mid - ;
}
}
return -;
} int main()
{
int array[];
int i;
int m;
long q;
scanf("%d",&n);
for(i=;i<n;i++)
scanf("%d",&array[i]);
scanf("%d",&m);
while(m--)
{
scanf("%ld",&q);
if(binarySearch(array,q)>=)
printf("Yes\n");
else
printf("No\n");
}
return ;
}