二分查找

Posted kmxojer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

分治法的基本思想:

将一个问题规模为n的问题分解成k个规模较小的子问题,这些子问题互相独立且与原问题相同。用递归的方式解这些子问题,将子问题的解合并得到原问题的解。

 

二分查找:

就是将一个序列(排好序的)分成两部分,如果a[mid]==key就返回mid,若大于就搜索左边,否则搜索右边。

 

题目描述:

第一行输入n;

第二行输入n个整数;

第三行输入m;

然后输入m个整数,分别判断该数是否在n个整数中,若在输出Yes,否则输出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;
}

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

代码题(12)— 二分查找

二分查找代码

PHP实现二分查找算法(代码详解)

「算法笔记」一文摸秃二分查找

C语言二分查找