Неверный результат реализации поиска перехода в Python

1

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

1 ответ

0

Когда вы делаете 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
  • 0
    Ааа, спасибо @newbie. Глупо с моей стороны пропустить такую основную проверку. ура

Ещё вопросы

Сообщество Overcoder
Наверх
Меню