在Python中实现跳转搜索的结果不正确

时间:2018-08-26 05:14:05

标签: python algorithm data-structures

我正在尝试在Python中实现跳转搜索。该代码在逻辑上对我来说看起来不错。除数组的第一个元素外,所有数字我都得到-1。有人可以帮忙吗?

def jumpsearch(array,x):
    n=len(array)
    m=int(sqrt(n))

    if array[0]>x:
        return -1

    for i in (0,n-1,m):
        if array[i]==x:
            return i
        if x<array[i]:
            for k in (i-m,i):
                if array[k]==x:
                    return k           
    return -1            

j=[1,2,3,4,5,6,7,8]
print(j)
jumpsearch(j,2) 

1 个答案:

答案 0 :(得分:0)

当您执行for k in (i-m,i):时,您不会在范围内进行迭代,但是k仅采用两个值:i-1m

for i in (0,n,m):行相同。

您还会得到不正确的结果,因为您从不签入最后一块。确实,即使执行for i in range(0, n, m):,您也将在i + m> = n时停止,因此您必须检入最后一部分以确保该元素不存在。

def jumpsearch(array, x):
    n=len(array)
    m=int(math.sqrt(n))

    if array[0] > x:
        return -1

    for i in range(0, n, m):        
        if array[i] == x:
            return i
        elif x < array[i]:
            for k in range(i-m, i):
                if array[k]==x:
                    return k 
            else:
                return -1  
    for j in range(i+1,n):
        if array[j] == x:
            return j
    else:
        return -1