二分,一种查找方式,用于在有序数列中查找一个数。每次通过比较已知范围的中间数和所求数来不断缩小范围,并在范围足够小时求出这个数。
思路如图:
根据这个,我么可以写出下面这个基础代码:
(在数组a中判断能否找到s)
#include<bits/stdc++.h>
using namespace std;
int n;
int a[100010];
int s;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>s;
int l,r;
for(int i=1;i<=n-1;i++)
{
l=i+1;
r=n;
while(r-l>1)//如果左右边界距离大于1则执行
{
int mid=(l+r)/2;
if(s>a[mid])//如果目标数大于中间值
{
l=mid;//左边界更新为中间值
}
else
{
r=mid;//右边界更新为中间值
}
}
if(s==a[l]||s==a[r])扫尾,判断边界是否满足条件
{
cout<<"Yes";
return 0;
}
}
cout<<"No";
return 0;
}
可以自己理解一下。
原文:https://www.cnblogs.com/Z-J-B-/p/13555972.html