我正在尝试在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)
答案 0 :(得分:0)
当您执行for k in (i-m,i):
时,您不会在范围内进行迭代,但是k
仅采用两个值:i-1
和m
。
与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