您的位置:首页 > 其它

二分查找的使用说明

2017-07-08 11:07 295 查看

先输入一个数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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: