二分查找

优点:

从包含n个元素的数组中执行查找操作仅仅需要O(lg n)时间

内容:

在任意情况下,我们仅仅考虑某个子数组,也就是说,介于两个索引之间的部分数组,将两个索引依次记为p=1,r=n,因此开始时, 子数组为整个完整数组。我们反复将子数组规模减半,直到发现以下任何一种情况发生:要么找到了要查找的元素,要么当前 的子数组为空(也就是说p>r)。反复对子数组执行减半操作需要花费O(lgn)的运行时间。

test = list(range(1,11))
test
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def binary(test,target):
    p = 0
    r = len(test)-1
    while p<=r:
        q = (p+r)//2
        if test[q] == target:
            return q
        else:
            if test[q]>target:
                r = q-1
            else:
                p = q+1
    return "Not found"

  

原文地址:https://www.cnblogs.com/zenan/p/8721384.html