二分查找

二分查找

思想:二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

实例:

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

    return find

alist = [1, 2, 3, 4, 8]
print(binarySearch(alist, 8))
原文地址:https://www.cnblogs.com/ghh520/p/13251606.html