二分法查找

会有一股神秘感。 提交于 2020-03-10 08:42:05

二分法要注意的点是 分的是下标,然后注意+1更新,因为判断之后,如果不等于mid,则下一个范围不用包含上一个mid。

def erfen1(nums,a):
    min = 0
    max = len(nums) - 1
    if a > nums[max] or a < nums[min]:
        return []
    while max >= min:
        mid = int((max+min)/2)
        if a == nums[mid]:
            return mid
        elif a > nums[mid]:
            min = mid+1
        else:
            max = mid-1
    return []

print(erfen1([3,4,5,6,7,8,9],9))

时间复杂度是O(logn)
如何看呢,原来的长度是n,每一次划分都是除以2,最后的长度是1,所以等式在这里插入图片描述
x代表的是二分的次数。x = log(n) 。2在这里可以不写,与5n的系数不写的道理一样。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!