matlab如何用二分查找法,c++ 二分查找的函数 lower_bound & upper_bound & binary_search

注:本文章为转载文章,转载地址:https://blog.csdn.net/liyizhixl/article/details/53860223

C++ STL 中二分查找函数主要有这三种:

lower_bound()

upper_bound()

binary_search()

这三个函数都运用于有序区间。

用法

1. lower_bound(a+1,a+1+n,x)-a

返回一个非递减序列 [1,n][1,n] 中的第一个大于等于值 x的位置 (int)(int)。

程序相当于:

int lower_bound()

{

int l=1,r=n;

while(l

{

int mid=(l+r)/2;

if(a[mid]>=x) r=mid; else l=mid+1;

}

return l;

}

2. upper_bound(a+1,a+1+n,x)-a

返回一个非递减序列 [1,n][1,n] 中的第一个大于值 x的位置 (int)(int)。

程序相当于:

int upper_bound()

{

int l=1,r=n;

while(l

{

int mid=(l+r)/2;

if(a[mid]>x) r=mid; else l=mid+1;

}

return l;

}

3. binary_search(a+1,a+1+n,x)

返回一个非递减序列 [1,n][1,n] 中是否存在值 x。(bool)(bool)。

程序相当于:

bool upper_bound()

{

int l=1,r=n;

while(l

{

int mid=(l+r)/2;

if(a[mid]>=x) r=mid; else l=mid+1;

}

if(a[l]==x) return true; else return false;

}

总结

这些二分查找函数时间复杂度都是 O(logn)O(logn),十分简便,缩短了代码,节约了时间,可以多多使用!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值