二分查找

# search


def search(li, item):
    """二分查找适用于有序列表"""

    n = len(li)
    if n == 0:
        return False
    # 从一半的位置开始找
    mid = n // 2
    # 那中间位置数据与要找的数据比较
    if item == li[mid]:
        return True
    elif item > li[mid]:  # 正序时,大于mid 往右找
        return search(li[mid + 1:], item)
    else:  # 正序时,小于mid 往左找
        return search(li[:mid], item)


if __name__ == '__main__':
    l = [1, 2, 3, 4, 5, 6]
    print(search(l, 1))
    print(search(l, 3))
    print(search(l, 6))
    print(search(l, 0))
    print(search(l, 9))

    # 时间复杂度:O(logn)