两种二分查找的区别
!!!
切记 :使用二分前,一定要保证容器有序
!!!
第一种
while(l<r)
{
mid=l+r>>1;
if(a[mid]>=n)
r=mid;
else
l=mid+1;
}
第二种
while(l<r)
{
mid=l+r+1>>1;
if(a[mid]<=n)
l=mid;
else
r=mid-1;
}
测试
测试一
容器中存在多个需查找的元素
待测容器 | a[11]={1,2,3,4,4,5,6,7,8,9,10}; |
查找元素 | 4 |
第一种输出下标 | 3 |
第二种输出下标 | 4 |
测试二
容器中不存在需查找的元素
待测容器 | int a[11]={0,1,2,3,4,5,6,7,8,9,10}; |
查找元素 | 4.5 |
第一种输出下标 | 5 |
第二种输出下标 | 4 |
区别
第一种:
返回 大于等于 x 的第一个下标
第二种:
返回 小于等于 x 的最后一个下标
应用
参考文章 : 浅谈两种二分模板 - Frank_Ou - 博客园