二分查找(折半查找)
优点是比较次数少,查找速度快,平均性能好
缺点就是要求待查表为有序表,且插入删除困难,因此折半查找适用于不经常变动而查找频繁的有序列表
递归实现
def binary_search(l, item):
"""递归的二分查找"""
if len(l) == 0:
return False
mid = len(l)//2
if item == l[mid]:
return True
else:
if item > l[mid]:
return binary_search(l[mid+1:], item)
else:
return binary_search(l[:mid], item)
l = [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(binary_search(l, 32))
print(binary_search(l, 99))
非递归实现
def binary_search(l, item):
"""非递归二分查找"""
start = 0
end = len(l) - 1
while start < end:
mid = (start + end)//2
if item == l[mid]:
return True
if item > l[mid]:
start = mid+1
else:
end = mid-1
return False
l = [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(binary_search(l, 32))
print(binary_search(l, 99))