二分查找有序列表中元素
第一种:使用递归方式
def binary_search_one(lst,target):
"""
:param lst: 传入的列表
:param target: 目标值
:return: 找到目标返回索引,未找到返回none
"""
len_lst = len(lst)
if len_lst<1:
return None
mid_index = len_lst//2
if target<lst[mid_index]:
return binary_search_one(lst[:mid_index],target)
elif target>lst[mid_index]:
return binary_search_one(lst[mid_index+1:],target)
else:
return mid_index
第二种:使用while循环
def binary_search_two(lst,target):
len_lst = len(lst)
first_index = 0
end_index = len_lst-1
while first_index <= end_index:
mid_index = (end_index+first_index)//2
if target<lst[mid_index]:
end_index = mid_index-1
elif target>lst[mid_index]:
first_index = mid_index+1
else:
return mid_index
return None