Python实现
def binary_search(my_list: list, item: int):
# low和high用于跟踪列表中需要查找的范围
low = 0
high = len(my_list) - 1
cntr = 1
while low <= high:
# 获取中间元素
mid = (low + high) // 2
guess = my_list[mid]
print("进行第%s次寻找,范围为%s-%s,中间值为%s" % (cntr, low, high, guess))
cntr += 1
# 如果相等,则找到了相应的元素
if guess == item:
return mid
# 如果中间元素大于需要查找的元素,说明需要查找的元素在左半边
elif guess > item:
high = mid - 1
# 如果中间元素小于需要查找的元素,说明需要查找的元素在右半边
else:
low = mid + 1
# 如果没有找到元素,返回None
return None
if __name__ == '__main__':
my_list = [x for x in range(1000) if x % 2 != 0]
print("找到值的位置为:", binary_search(my_list, 999))
进行第1次寻找,范围为0-499,中间值为499
进行第2次寻找,范围为250-499,中间值为749
进行第3次寻找,范围为375-499,中间值为875
进行第4次寻找,范围为438-499,中间值为937
进行第5次寻找,范围为469-499,中间值为969
进行第6次寻找,范围为485-499,中间值为985
进行第7次寻找,范围为493-499,中间值为993
进行第8次寻找,范围为497-499,中间值为997
进行第9次寻找,范围为499-499,中间值为999
找到值的位置为: 499
时间复杂度
二分查找法的时间复杂度为:(O(log_2n))