关于二分法的问题

二分法的问题

实现二分法不是很难。但是在网络上有些实现方法是错误的。问题出在终止循环、判断mid上。实现代码如下:

def bsearch(arr,v):
    left,right=0,len(arr)

    while left <= right:
        mid = (left + right) // 2
        if arr[mid] == v:
            return mid
        elif arr[mid] > v:
            right = mid-1
        else:
            left = mid+1
    else:
        return -1

问题1:终止条件

终止条件应该是right>=left。有的实现方法用的是right>left,可能会出现死循环现象

问题2:right=mid-1

改变上下限时,right=mid是不正确的。应该是right=mid-1。left同理应该是mid+1
建议使用bisect中的二分法,速度快而且可以返回符合条件的下标。

猜你喜欢

转载自blog.csdn.net/weixin_42272768/article/details/128202544
今日推荐