二分查找递归与非递归的方法
def binary_search(alist, val, start, end):
'''递归法'''
mid = (start + end)
if start <= end:
if alist[mid] == val:
return mid
elif alist[mid] > val:
# 此处递归如果用alist[:mid-1]则不是在原列表上进行操作,而是创建一个新的列表
return binary_search(alist, val, start, mid-1)
elif alist[mid] < val:
return binary_search(alist, val, mid+1, end)
return None
def binary_search_2(alist, val):
'''非递归法'''
n = len(alist)
left = 0
right = n-1
while left <= right:
mid = (left + right)
if val == alist[mid]:
return mid
elif val < alist[mid]:
right = mid - 1
elif val > alist[mid]:
left = mid + 1
return None
if __name__ == "__main__":
a = [1, 3, 5, 6, 6, 7, 8, 9]
print(binary_search(a, 8, 0, len(a)-1))
print(binary_search_2(a, 5))