Нисходящий порт не работает, хотя восходящий порт работает нормально
Я пытался реализовать как восходящий и нисходящий 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