python实现二分搜索binary_search
条件:给定一个升序列表,返回target值的下标,没有则返回-1
def binary_search(data, target):
target_index = -1
start_index = 0
end_index = len(data) - 1
while True:
middle_index = (end_index + start_index) // 2
middle_value = data[middle_index]
length = end_index + 1 - start_index
print(f"middle_index: {middle_index}, middle_value: {middle_value}, length: {length}")
if target == middle_value:
target_index = middle_index
break
elif target > middle_value:
start_index = middle_index + 1
else:
end_index = middle_index - 1
if not length:
break
return target_index
if __name__ == '__main__':
a = [1, 2, 3, 5, 8, 9, 10, 12, 14, 15, 16]
t_index = binary_search(a, 2)
print(t_index)