二分查找就是待查找的列表进行分半搜索

如下所示


image

二分查找普通实现:

def erfen(alist, item):
    start = 0
    end = len(alist) - 1
    while start <= end:
        n = int((start + end) / 2)
        if alist[n] == item:
            return True
        elif alist[n] > item:
            end = n - 1
        else:
            start = n + 1
    return False


alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(erfen(alist,10))
print(erfen(alist, 3))

递归实现:

#import sys
#sys.setrecursionlimit(1000000)
"""解决maximum recursion depth exceeded error """

def erfen(alist,item):
    if len(alist) == 0:
        return False
    else:
        mid=int(len(alist)/2)
        if alist[mid] == item :
            return True
        elif item < alist[mid]:
            return erfen(alist[:mid],item)
        else :
            return erfen(alist[mid+1:],item)

alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(erfen(alist,10))
print(erfen(alist, 3))
内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!