二进制搜索花费的时间太长

rqqzpn5f  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(303)

我正在尝试从头开始做一个二进制搜索算法,但是它总是比线性搜索平均花费更长的时间。
我生成一个随机数列表,然后使用随机目标搜索该列表。我用每个二进制和线性搜索函数(每个函数将搜索相同的列表)测量超过100个轨迹的平均时间。计时通过time.time()完成
如果列表长度为100000个数字,则二进制搜索所需的时间不到线性搜索的一半(例如0.0008s vs 0.002s)。
但是,如果列表是1000000个或更长的数字,则所需时间将始终明显长于线性(例如0.033s vs 0.021s)。
请注意,我在调用函数之前进行排序。我试过使用递归二进制搜索和迭代搜索。
递归地:

def binary_rec(target,L):
    mdpt = len(L)//2
    if len(L) <= 1:
        return False
    elif L[mdpt] == target:
        return True
    elif L[mdpt] < target: binary_search(target,L[mdpt:])
    elif L[mdpt] > target: binary_search(target,L[:mdpt])

迭代:

def binary(target,L):
    mdpt = len(L)//2
    while len(L) > 1:
        if L[len(L)//2] == target:
            return True

        elif L[len(L)//2] < target:
            L = L[:len(L)//2]

        elif L[len(L)//2] > target:
            L = L[len(L)//2:]

        mdpt = len(L)//2

    return False

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题