题目:
给定一个单调递增的整数序列,问某个整数是否在序列中。
输入:
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
输出:
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
--------------------------------------------------------------------------------------------
关键函数:int BinarySearch(int*a, int n, int x);
此函数功能是通过二分查找方法查询x是否在数组a中,n表示数组元素个数。
int BinarySearch(int *a, int n, int x)
{
int mid, low, high;//high,low用来控制查询区间范围
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (x < a[mid])
{//当要查询的数据比查询区间中点的数据小时,将查询区间缩小为前半区间
high = mid - 1;
}
else if (x > a[mid])
{//当要查询的数据比查询区间中点的数据大时,将查询区间缩小为后半区间
low = mid + 1;
}
else
{//否则表明x=a[mid],即找到所需数据
return 1;
}
}
return 0;
}
整体代码如下:
#include <stdio.h>
int BinarySearch(int *a, int n, int x);
int main()
{
int i, n, m, a[10000], b[50000];
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
scanf("%d", &m);
for (i = 0; i < m; i++)
{
scanf("%d", &b[i]);
}
for (int i = 0; i < m; i++)
{
if (BinarySearch(a, n, b[i]))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
int BinarySearch(int *a, int n, int x)
{
int mid, low, high;//high,low用来控制查询区间范围
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (x < a[mid])
{//当要查询的数据比查询区间中点的数据小时,将查询区间缩小为前半区间
high = mid - 1;
}
else if (x > a[mid])
{//当要查询的数据比查询区间中点的数据大时,将查询区间缩小为后半区间
low = mid + 1;
}
else
{//否则表明x=a[mid],即找到所需数据
return 1;
}
}
return 0;
}