Open goldEli opened 4 years ago
从有序数组中,快速找到某一项的位置,如果是遍历每一项的的话,时间复杂度就是O(n)。
如果取中间数比较大小,就可以过滤一半无用的数据,这样复杂度就会变成 logn。(log 就是对数,比如2^3 = 8,那么log8 = 3)
比如长度为8的数组 [1,3,5,6,8,12,32,71]
,用二分法找到 32
的位置:
arr = [1,3,5,6,8,12,32,71]
target = 32
def brinary_search(arr, target):
start = 0
end = len(arr) - 1
mid = int((start + end) / 2)
while mid < len(arr) or mid > -1:
mid = int((start + end) / 2)
guess = arr[mid]
if guess == target:
return mid
if guess > target:
end = mid - 1
elif guess < target:
start = mid + 1
return None
print(brinary_search(arr, target)) # 6
Go Back