仅当列表是有序的时候,二分查找才管用。
def binary_search(seq, num):
low, high = 0, len(seq)-1
while low <= high:
mid = (low+high) // 2
cur = seq[mid]
if num == cur:
return mid
elif num < cur:
high = mid - 1
else:
low = mid + 1
return None
seq = [1, 2, 5, 7, 9]
num = 7
print(binary_search(seq, num)) # 3
二分查找的运行时间为对数时间(或log时间)。
# 递归形式
def binary_search(seq, num):
return binary_search_recursion(seq, 0, len(seq)-1, num)
def binary_search_recursion(seq, low, high, num):
if low > high:
return None
mid = (low+high) >> 1
if seq[mid] == num:
return mid
elif seq[mid] < num:
return binary_search_recursion(seq, mid+1, high, num)
else:
return binary_search_recursion(seq, low, high-1, num)
(最近更新:2019年8月26日)