2012-01-16 3 views
2

Я изо всех сил пытаюсь понять, как изменить 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. Спасибо, спасибо.

+0

Код, который вы опубликовали, выглядит неправильно и не компилируется. Что такое данные? – templatetypedef

+0

О вашей реализации ... Во-первых, я не совсем понимаю, почему эта куча использует 2D-массив. Возможно, это уникальное ограничение вашей системы. Во-вторых, где объявлена ​​или заполнена переменная данных? Похоже, эта реализация требует немалой работы, чтобы даже обеспечить MaxHeap. – allingeek

+0

2d-массив - это системное ограничение, возвращаемые значения - это максимальная куча, а n - количество элементов в массиве. –

ответ

1

Единственное различие между кучей min и max - это компаратор. Если у вас есть функционирующая структура с макс-кучей, вам нужно будет только перевернуть компаратор.

Отъезд Introduction to Algorithms на Amazon. Структура макс-кучи описана очень подробно и доступна в функции предварительного просмотра или просмотра.

+1

Это должен быть комментарий – amit

+0

Я пересмотрю это утверждение. – allingeek

+0

К каким компараторам вы относитесь как к переключению < > не возвращает кучу минут –

Смежные вопросы