ホームページ > よくある問題 > ヒープソートでソートする方法

ヒープソートでソートする方法

リリース: 2019-06-12 09:24:36
オリジナル
5255 人が閲覧しました

ヒープソートでソートする方法

1. 初期ヒープの構築:

ヒープを初期化するとき、すべての非リーフ ノードがフィルターされます。 。

最後の非終端要素の添字は [n/2] 切り捨てられるため、フィルタリングは [n/2] 番目の切り捨て要素から開始して後ろから前に調整するだけで済みます。

たとえば、配列が与えられた場合、まず配列要素に基づいて完全なバイナリ ツリーを構築します。

その後、リーフではない最後のノードから、親ノード、左の子、右の子とその都度比較・交換が行われ、交換により子ノードがヒープの性質を満たさなくなる可能性があります。したがって、この交換の後は毎回、交換された子ノードを再調整する必要があります。

2. ヒープのソートを実行します:

初期ヒープを取得したら、それをソートできます。

ヒープ ソートは選択ソートです。作成される最初のヒープは、最初の順序付けされていない領域です。

ソートが開始されると、ヒープの先頭要素が最初に出力され(それが最も高い値であるため)、ヒープの先頭要素と最後の要素が入れ替わります。このようにして、n 番目の位置 ( (つまり、最後の位置) が順序付けされた領域として使用され、前の n-1 個の位置はまだ順序付けされていない領域です。順序付けされていない領域を調整します。ヒープを取得した後、ヒープの先頭と最後の要素を交換して、長さがご注文エリアの面積は2となります。 。 。

この操作を続けて、残りの要素をヒープに再調整し、ヒープの先頭要素を順序付き領域に出力します。各スワップの結果、順序付けされていない領域は -1 になり、順序付けされた領域は 1 になります。このプロセスは、順序付けされた領域の長さが n-1 になるまで繰り返され、ソートが完了します。

3. ヒープのソート例:

まず、次のように初期ヒープ構造を確立します:

ヒープソートでソートする方法

次に、では、ヒープの先頭の要素と最後の要素を入れ替えますが、このとき最後の位置を順序付け領域として使用し(順序付け済み領域は黄色で表示されます)、その後、他の非順序付け領域のヒープを調整します。大きな上部ヒープでは、ヒープの先頭と最後の要素を交換します。最後から 2 番目の要素の位置...

ヒープソートでソートする方法

このプロセスを繰り返します:

ヒープソートでソートする方法

最後に、順序付けされた領域の拡張が完了します。つまり、ソートが完了します。

ヒープソートでソートする方法

##ソートのプロセスから、次のことがわかります。昇順を取得したい場合は大きな上部ヒープを作成し、降順を取得したい場合は小さな上部ヒープを作成します。

以上がヒープソートでソートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート