码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找的使用说明

时间:2015-03-12 22:41:57      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

先输入一个数n,数组a里面存入n个数,在n个数里面查找m,如果能找到就输出YES,否则的话就输出NO。样例

输入:

5   3

2 3 4 5 1

输出:

YES

一般的情况下,时间复杂度为O(n),当n>100000000的时候,就要考虑到时间复杂度了,所以要用到二分查找,这样时间复杂度就为log(n)了,在学习二分查找的时候画出图更好理解一点

代码如下:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool binary_search(int *a,int len,int goal)
{
   int low=0;
   int high=len-1;
   while(low<=high)
   {
       int mid=(low+high)/2;
       if(a[mid]==goal)
        return true;
        else if(a[mid]>goal)     //说明查找的数字在前半部分,故把high指针移到mid-1的位置
            high=mid-1;
        else
            low=mid+1;         //说明查找的数字在后半部分,故把low指针移动到mid+1的位置

   }
}
int main()
{
    int n,m;
    int a[100];
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
            cin>>a[i];
            sort(a,a+n);        //必须要先排序
        bool d= binary_search(a,n,m);
        if(d)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}


二分查找的使用说明

标签:

原文地址:http://blog.csdn.net/qq_qingtian/article/details/44227215

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!