二分查找是一种算法,类似于任何东西都从中间选.他由三个控制数组的变量:left,right,mid.left表示区间的左边界,right表示区间的右边界,mid是左区间和右区间的中间值.初始时left=1,right=n;重复执行取mid,right,left,直到left>right.
贴代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[110005],x;
ll erfen(ll x)
{
ll left=1,right=n,mid;
while(left<=right)
{
mid=(left+right)/2;//mid为left和right的中间值
if(a[mid]<=x) left=mid+1;//如果a[mid]<=x,修改左边界值为mid+1
else right=mid-1;//如果a[mid]>x,修改右边界值为mid-1
}
return a[right]
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
cin>>x;
cout<<erfen(x);
return 0;
}
//友情提示:二分查找只能适用于已经排好序的序列里.