Я пытаюсь реализовать поиск в 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)
Когда вы делаете for k in (im,i):
вы не итерации в диапазоне, но k
принимает только 2 значения: i-1
и m
.
То же самое для строки for я in (0,n,m):
Вы также получаете неверные результаты, потому что никогда не проверяете последний блок. Действительно, даже for я in range(0, n, m):
вы остановитесь, когда я + 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
range
... (например,for i in range(0,n-1,m):