#include <bits/stdc++.h>
using namespace std;
bool erfen(int *a,int x,int m)//二分查找函数
{
bool flag = false;//没找到为false,找到变为true
for(int l=1,r=m;l<=r;){
int mid = (l+r)/2;
if(x == a[mid]){//如果mid直接是找的数,直接返回减少运行时间
flag = true;
break;
}
else if(x > a[mid]){//如果更小,找mid右边的数,所以挪左边界
l = mid + 1;
}
else if(x < a[mid]){//如果更大,找mid做边的数,所以挪右边界
r = mid -1;
}
}
return flag;
}
int main()
{
int m,n;//m为数组元素个数
cin>>m>>n;//n为查找多少次
int a[m+10];
for(int i=1; i<=m; i++)//读入数组,数组已排好序
{
scanf("%d",&a[i]);
}
while(n--)//查找n次
{
int x;
cin>>x;
(erfen(a,x,m))?(printf("YES\n")):(printf("NO\n"));
}//找到输出YES,找不到输出NO
return 0;
}
二分查找代码
最新推荐文章于 2024-07-13 13:36:16 发布