二分法要注意的点是 分的是下标,然后注意+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的系数不写的道理一样。
来源:CSDN
作者:caihuanqia
链接:https://blog.csdn.net/caihuanqia/article/details/104747769