Home > Algorithm | Excel VBA > ヒープソート・アルゴリズムの訂正・ Correction of HeapSort Algorithm

ヒープソート・アルゴリズムの訂正・ Correction of HeapSort Algorithm


訂正:20%効率化されたヒープソート・アルゴリズムと書いていましたが、どうにも腑に落ちなかったので、C言語で書かれた専門書を買って調べたところ、ここに書いているコード(効率化されたヒープソートと書いたコードとほぼ同じもの)が本に書かれていました。

この記事の前に書いたヒープソートのコードは、Wikipediaや海外の複数のサイトで紹介されていたC言語のアルゴリズムを参考にしたものでした。それらが間違っているとは言い切れないし、難しいところです。ただ、効率化された新しいヒープソートと紹介した部分は間違っていますので、ここで訂正します。

簡単な時間測定で、通常のヒープソートよりも時間が短縮されます。コムソート11よりも少しだけ早くなりました。100万個の配列での相対的比較です。処理数は最低で13,815,511回となりますので単純計算で1万個の配列のソートテストを少なくとも150回して平均値を取ったのとほぼ同じになります。10,000,000*log(10,000,000)/10,000*log(10,000)=150(テストは乱数で作った配列の並び替えです)

アルゴリズム的には当然、O(N*log N) の範囲内での改善になります。コードは以下に紹介しています。

According to the HeapSort algorithm, the portion of the comparison & swap was all done in loop. I have removed the portion of compare & swap from the loop. As a result, large amounts of processings of sorting have been improved. New HeapSort is equivalent to CombSort11 or became more than it.

ソースコードは、以下のとおりです。通常のヒープソートとコムソート11のコードも書きました。

In addition, I also wrote CombSort11 & HeapSort(normal) shown as below.

Comments:0

Comment Form

Home > Algorithm | Excel VBA > ヒープソート・アルゴリズムの訂正・ Correction of HeapSort Algorithm

Return to page top