def binary_search_1(alist, item):
"""递归版---二分查找"""
n = len(alist)
if n > 0:
# 中间值
mid = n // 2
if alist[mid] == item:
return True
# 查找值落在中间值左侧
elif item < alist[mid]:
return binary_search_1(alist[:mid], item)
# 查找值落在中间值右侧
else:
return binary_search_1(alist[mid + 1:], item)
return False
def binary_search_2(alist, item):
"""非递归版---二分查找"""
n = len(alist)
left = 0
right = n - 1
while left <= right:
mid = (left + right) // 2
if alist[mid] == item:
return True
# 查找值落在中间值左侧, 更改right
elif item < alist[mid]:
right = mid - 1
# 查找值落在中间值右侧, 更改left
else:
left = mid + 1
return False
if __name__ == '__main__':
alist = [11, 18, 20, 24, 36, 44, 45, 66, 78]
print(binary_search_2(alist, 24))
print(binary_search_2(alist, 89))
原文:https://www.cnblogs.com/KX-Lau/p/12518223.html