二分查找

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))

原文地址:https://www.cnblogs.com/focksor/p/binary_search_python.html