二分查找
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e3 + 5;
int n, m;
int a[N];
void binarySearch(int m)
{
int left = 0, right = n - 1;
int mid;
while(left <= right)
{
mid=(left+right)/2;
if(m==a[mid])
{cout<<"YES"<<endl;
return;}
else if(m>a[mid])left=left+1;
else right=right-1;
}
cout << "NO" << endl;
}
int main()
{
cin >> n;
for(int i = 0 ; i < n ; i++)
{
cin >> a[i];
}
sort(a, a+n);
cin >> m;
binarySearch(m);
return 0;
}
const int N = 1e3 + 5;
:定义了一个常量N
,用于表示数组a
的最大容量,这里设定为1000 + 5
,可以根据实际需要存储的数据量来确定合适的值,在数组定义等场景中使用,以保证数组不会越界。int n, m;
:定义了两个整型变量,n
通常用于记录输入的数组元素个数,m
可能用于后续要查找的目标值等,具体含义结合程序逻辑来看,会在后续代码中通过输入操作赋予它们实际的值。int a[N];
:定义了一个整型数组a
,其大小为N
,用于存储一系列整数,后续会通过输入操作将具体的数值存入这个数组中。- 调用
sort(a, a + n)
函数,使用algorithm
头文件中提供的sort
算法对数组a
进行升序排序,这样后续进行二分查找时才能保证算法的正确性(二分查找要求数组是有序的)。 - 再通过
cin >> m
从标准输入读取一个整数赋值给m
,这个m
就是要在已经排序好的数组a
中查找的目标值。 - 最后调用
binarySearch(m)
函数,传入目标值m
进行二分查找操作,根据查找结果输出相应信息,查找结束后main
函数返回0
,表示程序正常结束。