私はこのアルゴリズムを実装しようとしてきましたが、どこから始めたらいいかわかりません。基本的に、私は、トップレベルが最小(minHeap)であること、またはトップレベルがすべての最大値(maxHeap)であることを2つの方法で実装することができると理解しています。私は2つの方法のいずれかについてたくさんのことを知っていて、実際にそれを実装する方法については把握できませんでした。私は一般的にアイデアを得ることはできません、私は言うでしょう、誰もこの作品の仕方を教えてくださいできますか? minHeapの動作方法やmaxHeapのように。 ありがとうございます!置き換えの選択ソート
答えて
私は、配列内のバイナリヒープ実装の基本的な知識があると仮定しています。
昇順にソートする整数の配列があるとします。 1つの方法は、配列内の項目を並べ替えて、最大ヒープを形成することです。
次に、ヒープ内の最後の項目と最上位項目(配列内の最大項目)を入れ替え、ヒープ数を1減らし、上から下にある項目をヒープ内の新しい場所に移動します。最後に、配列の最初の項目が次に大きい項目になります。あなたはすべてのアイテムと配列の並べ替えを繰り返す。
小さな例を考えてみましょう。アレイ[4,7,6,1,3,5,2]
が与えられた場合、Floydのアルゴリズムを使用してヒープに並べ替えます。
for (int i = array.length/2; i >= 0; i--)
{
siftDown(i);
}
これはO(n)操作です。
完了したら、配列はバイナリヒープに配置されます。この場合、ヒープが[7,4,6,1,3,5,2]
、または次のようになります。[2,4,6,1,3,5,7]
を:だから
7
4 6
1 3 5 2
、私たちは私たちを与えて、最後の項目でルートアイテムを入れ替えます。私たちは、カウントを減少させ、その適切な場所まで2をふるいにかける、与える:[6,4,5,1,3,2,7]
を、またはヒープ表現:
6
4 5
1 3 2
(我々は数を減少させたので、私は7を省略しかし、それは、配列の末尾にはまだです。再び)
、ヒープ内の最後の項目でトップのアイテムを入れ替える:[2,4,5,1,3,6,7]
、回数を減らし、ダウン取捨選択:[5,4,2,1,3,6,7]
:
5
4 2
1 3
あなたは、ヒープ内の残りの5つの項目のことを継続した場合、あなたは終わるでしょうソートされた配列を持ちます。
このためのコードは非常に簡単です:
int count = array.length-1;
while (count > 0)
{
swap(array[0], array[count]);
--count;
siftDown(0);
}
あなたは降順のソートを行いたい場合は、最大ヒープで上記の操作を行い、その後、アレイ(O(1)を逆にすることができますいずれか操作)、または開始するためのミニヒープを構築できます。
siftDown
方法は、単にバイナリヒープ建設のための規則に従って、その適切な場所まで項目を移動します。
void siftDown(int index)
{
// Left child is at index*2+1. Right child is at index*2+2;
while (true)
{
// first find the largest child
int largestChild = index*2+1;
// if left child is larger than count, then done
if (largestChild >= count)
{
break;
}
// compare with right child
if (largestChild+1 < count && array[largestChild] < array[largestChild+1])
{
++largestChild;
}
// If item is smaller than the largest child, then swap and continue.
if (array[index] < array[largestChild])
{
swap(array[index], array[largestChild]);
index = largestChild;
}
else
{
break;
}
}
- 1. 「ファイルを選択し、」置き換えテキストバー
- 2. パンダの列の選択値を置き換えます
- 3. Django ModelFormウィジェットの選択肢の値を置き換えます。
- 4. コンボボックスの選択矢印が置き換えられました
- 5. 選択内のテキストで値を置き換える方法
- 6. 選択時にdivの内容を置き換えます
- 7. 選択ドロップダウン矢印をファーアイコンに置き換えます
- 8. コンテンツを置き換えるテキストノードを選択
- 9. マウスオーバー/ホバーで選択タグでテキストを置き換えます
- 10. Rails3検索ボックスを選択ドロップダウンに置き換えます。
- 11. WPF RichTextBox - 選択したテキストをカスタムコントロールに置き換えよう
- 12. vim:ビジュアルモード選択でテキストを置き換える方法は?
- 13. 選択したテキストをpタグ内に置き換えます
- 14. PSQLの選択と置換
- 15. ソート関数の値を置き換えるときの問題
- 16. パンダのデータフレームで選択した列の値を置き換える方法は?
- 17. c#文字列内の文字選択の各インスタンスを置き換えます。
- 18. divの最初のイメージを選択してイメージを置き換えるsrc
- 19. ユーザーの入力テキストをプログラマーの選択肢に置き換える方法
- 20. PHP文字列内の選択された文字を置き換えます。
- 21. 選択されたオブジェクト(Maya + Python)のキャッシュパスを置き換えます
- 22. ユーザーの選択に応じてUI要素を置き換えます。
- 23. C#Word文書、選択した範囲のテキストを置き換えますか?
- 24. DropDownListの選択に基づいてTextBoxを置き換えます
- 25. 選択したすべての要素をjavascriptに置き換えます。
- 26. emacsでマウスの選択された領域を置き換えます
- 27. Jquery - 選択したhtmlタグを値の文字列に置き換えます。
- 28. C++空の実装で関数を選択的に置き換える方法
- 29. 選択クエリで特定の列データを置き換えますか?
- 30. 選択ソートは
あなたは、ヒープの並べ替えや選択ソートをお探しですか? –
置換の選択では、ヒープを構造体として使用して、ファイルを読み込み、置換の選択を行い、別のファイルに書き出す必要があります。外部ソート – NoodleCoder312
Heapsort:https:// en。 wikipedia.org/wiki/Heapsort –