二分查找

二分查找是一种快速查找列表中元素的算法,只可以作用在有序序列中。二分查找是很多优化算法的基础,原理简单,但是要想深入钻研也有很大的空间

def binary_search(alist, item):    # alist是一个有序序列,item是我们要在alist中查找的元素
    low = 0
    high = len(alist) - 1
    while low <= high:
        mid = (low + high) // 2    # 中间元素的下标
        if alist[mid] > item:    # 查找的元素<中间元素,查找的元素存在中间元素左侧
            # 将中间元素左侧序列作为一个新的序列,然后再基于item和当前新序列的中间值进行大小比较
            high = mid - 1    # low和high就可以表示新序列的范围
        elif alist[mid] < item:    # 查找的元素存在于中间元素右侧
            low = mid + 1    # low和high就可以表示中间元素右侧的子序列
        else:    # 查找的元素就是中间元素
            return True
    return False

alist = [1, 2, 3, 4, 5]
print(binary_search(alist, 1))    # True
print(binary_search(alist, 3))    # True
print(binary_search(alist, 5))    # True
print(binary_search(alist, 7))    # False