я пытаюсь создать функцию HeapSort в python, используя некоторые вспомогательные функции.
Я пытаюсь следовать инструкциям своей книги и использую некоторые функции, такие как fixHeap
, которые восстанавливают правильный порядок в куче с узлом, не следующим правилам:
def getMaxKnot(i,j,A):
k = max(A[i],A[j])
if k==A[i]:
return i
if k==A[j]:
return j
def fixheap(v,H): #basically restore an heap with a node not following heap rules
if (2*v+1)>len(H)-1:
return H
else:
u=getMaxKnot(2*v+1,2*v+2,H)
if H[u]>H[v]:
listoperations.swap(u,v,H) #swap item in position u and v
return fixheap(u,H)
Теперь я хочу в основном создать функцию heapify, которая рекурсивно работает с левым и правым деревьями, используя мою функцию fixheap
для восстановления правильного порядка.
Моя идея заключалась в следующем:
def heapify(A):
if A==[]:
return A
else:
heapify(LEFT TREE)
heapify(RIGHT TREE)
fixheap(0,A)
Любые идеи о том, как разделить мой массив A на ЛЕВОЕ ДЕРЕВО и ПРАВОЕ ДЕРЕВО?