二分查找
举个例子-----猜数字:
假如需要你猜一个1–100的数字,每次都会告诉你猜大了或是猜小了
最笨的方法是:
1—猜小了
2—猜小了
3—猜小了
…
这种方法很慢,应为它几乎要检查所有的数字。
比较快的方法是:
你可以先猜50(0和100中间)—猜小了
在猜75(50和100中间)—猜大了
在猜63(50和75中间)—猜大了
…
这种方法很快,因为每次都会排除一半的错误答案
每次排除的数字个数为
50个元素----25个元素—13个元素—7个元素—4个元素----2个元素—1个元素
这样的话不管正确答案是多少都能在7步内找到正确答案
这就是二分查找。
*注:二分查找的大O运行时间为logn(对数时间)
二分查找代码
二分查找代码如下:
def erfen(list, item):
low = 0
high = len(list)-1
while low <= high:
middle = int((low+high)/2)
guess = list[middle]
if guess == item:
return middle
if guess > item:
high = middle-1
else:
low = middle+1
print(erfen([1, 3, 5, 7, 9], 9))
这里返回的是元素下标。