《算法图解》记录1
二分法查找有序序列中(列表),某元素的索引#!/usr/bin/env python# -*- coding: utf-8 -*-# 二分法查找有序序列中(列表),某元素的索引def get_idx(list, item):start = 0end = len(list) - 1while start <= end:mid = i...
·
二分法查找有序序列中(列表),某元素的索引
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 二分法查找有序序列中(列表),某元素的索引
def get_idx(list, item):
start = 0
end = len(list) - 1
while start <= end:
mid = int((start + end) / 2) # 如果是小数,向下取整,python2 默认向下取整
guess = list[mid]
if guess == item:
return mid
if guess > item: # 猜的数字大了
end = mid - 1
else:
start = mid + 1
return None
li1 = [0, 1, 2, 3, 4]
print( get_idx(li1, 7))
print( get_idx(li1, 2))
注意:
在python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉(向下取整),浮点数除法会保留小数点的部分得到一个浮点数的结果。
在python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。
如果列表中包含8个元素,使用二分法最多需要检查3个元素(最多需要3步),因为 log28 =3 (23=8 )。如果列表包含1024个元素,你最多需要检查10个元素(最多需要10步),因为 log21024 =10 (210=1024 )。
练习:
1.1 假设有一个包含128个名字的有序列表,你要使用二分法在其中查找一个名字,请问最多需要几步才能找到?
1.2上面列表长度翻倍后,最多需要几步?
更多推荐
所有评论(0)