两种二分查找的区别

!!!

切记 :使用二分前,一定要保证容器有序

!!!

第一种

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 的最后一个下标

应用

1996. 打乱字母 - AcWing题库

参考文章 : 浅谈两种二分模板 - Frank_Ou - 博客园

posted @ 2022-11-13 22:27  秋天Code  阅读(30)  评论(0)    收藏  举报