二分搜索的时间复杂度为o(logn),仅适用于单调序列
while(top-low>1)
{
int m=(top+low)/2;
if(a[m]<=n) low=m;
if(a[m]>=n) top=m;
}
//结果 a[low]为小于等于n的最大值
//结果 a[top]为大于等于n的最小值
//low==top 说明刚至少好有一个等于它 否则一个都没有
稍做修改,可以实现其他功能,比如寻找大于n的最小值
while(top-low>1)
{
int m=(top+low)/2;
if(a[m]<=n) low=m;
if(a[m]>n) top=m;
}
//结果 a[low]为小于等于n的最大值
//结果 a[top]为大于n的最小值