2012-01-16 1 views
2

maxHeapをminHeapに変更する方法を検討するのには苦労しています。私は現在、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を発見していないように見える:これは私が使用しているmaxHeapです。どんな助けも素晴らしいだろう、ありがとう。

+0

投稿したコードが正しく表示されず、コンパイルされません。データとは何ですか? – templatetypedef

+0

実装について...まず、このヒープが2D配列を使用している理由を理解していません。おそらくあなたのシステムのユニークな制約です。次に、データ変数はどこに宣言されていますか?この実装のように、MaxHeapを提供するためにはかなりの作業が必要です。 – allingeek

+0

2次元配列はシステム制約であり、返される値は最大ヒープであり、nは配列内の要素数です。 –

答えて

1

最小ヒープと最大ヒープの唯一の違いは、コンパレータです。機能している最大ヒープ構造の場合は、コンパレータを反転するだけでよい。

AmazonではIntroduction to Algorithmsをチェックしてください。最大ヒープ構造については詳細に説明されており、プレビューや「Look Inside」機能で利用できます。

+1

これはコメントです – amit

+0

この文を改訂します。 – allingeek

+0

どのコンパイラに対して、< >を切り替えると言っているのですか? –

関連する問題