Возникли проблемы с конструктором для MaxHeapify, когда нужно заказать более двух чисел. пошагово через код, он работает для первых нескольких, а затем продолжается без правильного упорядочивания чисел.
я не уверен, почему это не работает, любая помощь по поводу того, какие переменные или сравнения я, кажется, здесь смешиваю, была бы очень признательна.
public class MaxHeap
{
public int[] heap;
public int index_to_last_element;
protected void maxHeapify(int index)
{
int left = leftchild(index);
int right = rightchild(index);
int largest = index;
if (left < index_to_last_element && left != -1 && heap[left] > heap[index])
largest = left;
if (right < index_to_last_element && right != -1 && heap[right] > heap[largest])
largest = right;
if (largest != index)
{
int temp = heap[index];
heap[index] = heap[largest];
heap[largest] = temp;
maxHeapify(largest);
}
}
public int parent(int pos)
{
return (pos - 1) / 2;
}
public int leftchild(int pos)
{
return 2 * pos + 1;
}
public int rightchild(int pos)
{
return 2 * pos + 2;
}