Нисходящий порт не работает, хотя восходящий порт работает нормально

Я пытался реализовать как восходящий и нисходящий heapsort с Python. Кажется, что восходящий порт не работает должным образом, хотя нисходящий порт работает нормально. Я посещаю мой код и тестовые случаи ниже. Я использовал алгоритм heapsort в порядке убывания, как описано здесь, и дважды проверил мой код с их образцом кода на Java, но он все равно выдает неправильный результат. Любая помощь?

def max_heapify(A, n, i):
    maxIndex = i 
    left = 2 * i + 1
    right = 2 * i + 2

    if left < n and A[left] > A[maxIndex]:
        maxIndex = left 

    if right < n and A[right] > A[maxIndex]:
        maxIndex = right 

    if maxIndex != i:   
        A[i], A[maxIndex] = A[maxIndex], A[i]
        max_heapify(A, n, maxIndex)

def min_heapsort(A):
    n = len(A)

    for i in range(n//2, -1, -1):
        max_heapify(A, n, i)

    for i in range(n-1, 0, -1):
        A[i], A[0] = A[0], A[i]
        max_heapify(A, i, 0)

    return A

def min_heapify(A, n, i):

    minIndex = i 
    left = 2 * i + 1
    right = 2 * i + 2

    if left < n and A[left] < A[minIndex]:
        minIndex = left 

    if right < n and A[right] < A[minIndex]:
        minIndex = right 

    if minIndex != i:   
        A[i], A[minIndex] = A[minIndex], A[i]

def max_heapsort(A):
    n = len(A)

    for i in range(n//2, -1, -1):
        min_heapify(A, n, i)

    for i in range(n-1, -1, -1):
        A[i], A[0] = A[0], A[i]
        min_heapify(A, i, 0)

    return A

A = [7, 6, 5, 4, 3, 2, 1]
print min_heapsort(A) # [1, 2, 3, 4, 5, 6, 7], correct

A = [1, 2, 3, 4, 5, 6, 7]
print max_heapsort(A) # [7, 6, 4, 5, 3, 2, 1], wrong

0 ответов

Другие вопросы по тегам