В l oop, как только вы поменяете местами значения для currentIdx
и currentChildIdx
, вам следует присвоить currentIdx = currentChildIdx
.
. И как только вы измените currentIdx
, вам нужно будет повторно вычислить левый и правый дочерние индексы и новая currentChildIdx
.
Основная идея c заключается в следующем:
while currentIdx < heap_length
currentChildIdx = index of largest child
if (heap[currentIdx] >= heap[currentChildIdx])
break; // node is now in the right place
swap(heapCurrentIdx, heap[currentChildIdx)
currentIdx = currentChildIdx
Я предлагаю вам построить эту базовую c структуру и затем выполните один шаг в отладчике, чтобы убедиться, что он работает должным образом.