您的位置:首页 > 其它

二分查找总结

2014-11-12 12:51 295 查看
今天看了个书,自己说用笔写一个二分发现怎么都是死循环跳不出来,真是太渣了,写一个总结吧。有许多人觉得简单,可是你当别人面写一个的话还是要出很多问题的

我们要二分查找的数组为{1,1,2,2,3,3,5,5,6,6,7,8,15}

首先我们仿写一个lower_bound()

while(l < r){
m = (l + r) >> 1;
if(a[m] >= x){
r = m;
}
else{
l = m + 1;//我们查找值的位置只能出现于[m + 1, r],如果写m的话会死循环,应为你没有剔除不符合条件的区间
}
}再仿写一个upper_bound()
int myupperBound(int x){
int l = 0, r = 5, m;
while(l < r){
m = (l + r) >> 1;
if(a[m] <= x){
l = m + 1;//我们查找值的位置只能出现于[m + 1, r]<span style="font-family: Arial, Helvetica, sans-serif;">如果写m的话会死循环,因为没有剔除不符合条件的值</span>
}
else{
r = m;
}
}
return l;
}所以我们二分查找重要的就是每次都要把不符合条件的区间剔除,然后在符合条件的区间内查找,只要守着这一条规则肯定就没有问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: