二分查找
前提:列表必须是有序的
示例说明:需求是查找item
在列表lists
中的位置,
我们可以先拿itme
去和列表lists
的中间数lists[mid]
去比较:
如果itme
等于lists[mid]
那证明找到了,结束函数
如果itme
大于lists[mid]
,则我们将小于lists[mid]
的值全部舍弃掉,
如果itme
小于lists[mid]
,则我们将大于lists[mid]
的值全部舍弃掉,
最后再拿itme
和剩下部分的中间值比较,以此类推
def binary_search(lists, item):
low = 0
high = len(lists) - 1
while low <= high:
mid = int((low + high)/2)
guess = lists[mid]
if guess == item:
return mid
if guess > item:
high = mid
else:
low = mid
return None
test_list = [i for i in range(100)]
使用二分查找的好处:
使用二分查找可以大量的减少我们程序执行的步数,对于包含n个元素的列表,用二分查
找最多需要log 2 n步,而简单查找最多需要n步。
如果列表包含100个数字,简单查找最多需要猜100次。如果列表包含1亿个数字,那么简单查找最多则需要猜1亿次.
二分查找则不同。如果列表包含100个元素,最多要猜7次;如果列表包含40亿个数字,最多
需猜32次