将最大堆排序更改为最小堆排序

时间:2012-01-16 19:11:07

标签: java algorithm heap

我正在努力研究如何将maxHeap更改为minHeap。我目前有一个maxHeap算法,但我想知道如何更改它。这是我使用的maxHeap:

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。任何帮助都会很棒,谢谢。

1 个答案:

答案 0 :(得分:1)

最小和最大堆之间的唯一区别是比较器。如果你有一个正常运行的最大堆结构,你应该只需要翻转比较器。

在亚马逊上查看Introduction to Algorithms。最大堆结构的描述非常详细,可在预览或“Look Inside”功能中使用。