二分搜索的时间复杂度为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的最小值
本文详细介绍了二分搜索算法的应用及其实现方式。针对单调序列,通过两个实例展示了如何找到小于等于目标值的最大值和大于目标值的最小值。此外,还提供了一种查找大于目标值最小元素的方法。
2305

被折叠的 条评论
为什么被折叠?



