一、使用递归
二分查找使用递归时,每次回返回一个新的列表,时间复杂度低但是占用空间。
def binary_search(alist, item):
n = len(alist)
if n > 0: # 如果列表的长度大于0,即列表中有元素就开始查找
mid = n // 2
if alist[mid] == item:
return True
elif item < alist[mid]:
return binary_search(alist[:mid-1], item)
else:
return binary_search(alist[mid+1:], item)
return False # 如果没有找到返回False
alist = [1, 2, 3, 4, 5, 6, 7, 8]
print(binary_search(alist, 8))
>>True
二、不使用递归,使用循环
使用循环时间复杂度变大,但是不占空间
def binary_search2(alist, item):
n = len(alist)
first = 0
last = n-1
while first <= last:
mid = (first + last) // 2
if alist[mid] == item:
return True
elif item < alist[mid]:
last = mid - 1
else:
first = mid + 1
return False
alist = [1, 2, 3, 4, 5, 6, 7, 8]
print(binary_search2(alist, 8))
>>True