noj二分查找

二分查找:

要么左边,要么右边,哈哈哈哈

描述
给定一个单调递增的整数序列,问某个整数是否在序列中。
 
输入
第一行为一个整数n,表示序列中整数的个数;第二行为n(n不超过10000)个整数;第三行为一个整数m(m不超过50000),表示查询的个数;接下来m行每行一个整数k。
 
输出
每个查询的输出占一行,如果k在序列中,输出Yes,否则输出No。
 
输入样例
5
1 3 4 7 11
3
3
6
9
 
输出样例
Yes
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;
}
原文地址:https://www.cnblogs.com/kmxojer/p/9939619.html