Я изо всех сил пытаюсь понять, как изменить maxHeap на minHeap. В настоящее время у меня работает алгоритм maxHeap, но я хотел бы знать, как его изменить. Это maxHeap я использовал:Изменение maxHeap Сортировка minHeap Сортировка
public static int [][] fixheap(int heap[][], int n, int i){
int j=2*i;
int weight = heap[i][0];
while (j<=n){
if((j<n) && heap[j][0] < heap[j+1][0])
j++;
if(weight >= heap[j][0]) break;
else
heap[j/2][0] = heap[j][0];
j=j*2;
}
heap[j/2][0]= data;
return heap;
}
public static void makeheap(int heap[][], int n){
for (int i=n/2; i>=0; i--){
fixheap(heap, n ,i);
}
}
Я попытался обратить вспять некоторые признаки, которые кажутся уместным, однако, я не нашел minHeap. Спасибо, спасибо.
Код, который вы опубликовали, выглядит неправильно и не компилируется. Что такое данные? – templatetypedef
О вашей реализации ... Во-первых, я не совсем понимаю, почему эта куча использует 2D-массив. Возможно, это уникальное ограничение вашей системы. Во-вторых, где объявлена или заполнена переменная данных? Похоже, эта реализация требует немалой работы, чтобы даже обеспечить MaxHeap. – allingeek
2d-массив - это системное ограничение, возвращаемые значения - это максимальная куча, а n - количество элементов в массиве. –