python数据结构-二分查找

二分查找


        有序列表对于我们的比较是很有用的。在顺序查找中,当我们与第一个项进行比较时,如果第一个项不是我们要查找的,则最多还有 n-1 个项目。 二分查找从中间项开始,而不是按顺序查找列表。 如果该项是我们正在寻找的项,我们就完成了查找。 如果它不是,我们可以使用列表的有序性质来消除剩余项的一半。如果我们正在查找的项大于中间项,就可以消除中间项以及比中间项小的一半元素。如果该项在列表中,肯定在大的那半部分。然后我们可以用大的半部分重复这个过程。从中间项开始,将其与我们正在寻找的内容进行比较。再次,我们找到元素或将列表分成两半,消除可能的搜索空间的另一部分。下图展示了该算法如何快速找到值 54 。完整的函数见CodeLens 3中。


建立一个binarySearch.py文件

# 二分法查找
def binarySearch(alist, item):
    first = 0
    last = len(alist)-1
    found = False
    while first <= last and not found:
        midpoint = int((first + last) / 2)
        if alist[midpoint] == item:
            found = True
        else:
            if item < alist[midpoint]:
                last = midpoint - 1
            else:
                first = midpoint + 1
    return found


testlist = [0, 1, 2, 8, 13, 17, 32, 42]
print(binarySearch(testlist,3))
print(binarySearch(testlist,13))

递归调用二分查找函数

# 递归调用二分查找
def binarySearch(alist, item):
    if len(alist) == 0:
        return False

    else:
        midpoint = (len(alist) - 1) // 2
        if alist[midpoint] == item:
            return True
        else:
            if item < alist[midpoint]:
                return binarySearch(alist[:midpoint], item)
            else:
                return binarySearch(alist[midpoint + 1:], item)


testlist = [0, 1, 2, 8, 13, 17, 19, 32, 54]
print(binarySearch(testlist, 3))
print(binarySearch(testlist, 13))

猜你喜欢

转载自blog.csdn.net/qq_29286967/article/details/80996667