Math Battle [ 0325: 最悪ケースでの sort 比較 ]

[ 0325: 最悪ケースでの sort 比較 ]


[ 広世正憲の回答 ]

乗児君がお膳立てしてくれましたので、
それを引き継いで最悪ケース (worst case) での実行時間を比較してみました。
最悪ケースとは対象となる配列のデータが逆順に並んでいる場合です。

  • データがランダムに並んでいる場合は QuickSort と MergeSort はほぼ変わらず。
    HeapSort は速いです。

  • Worst case になると QuickSort は非常に遅くなります。途中でやめました。
    MergeSort と HeapSort はデータのランダムさに影響を受けていません。


[ 湯会老人のコメント ]

正憲君、お疲れさま。

われわれは QuickSort が最も速いと思っていましたが、
実は HeapSort のほうが安定して速いわけですね。
なお、QuickSort の中で pivot を決める部分がありますが、
この部分を乱数を使うなどして改造すれば
worst case での性能が良くなるかも知れません。

他のメンバーからのコメントを待ちましょう。


[ 井伊莞爾君のコメント ]

C/C++ では stdlib.h で宣言された qsort (quick sort) が使えますね。
Perl 組み込みの sort 関数はどのアルゴリズムを使っているのでしょうか?


[ 三方万理先生のコメント ]

莞爾君、Perl の sort は今は MergeSort です。

Perl 5.6 and earlier used a quicksort algorithm ...
In 5.7, the quicksort implementation was replaced with a
stable mergesort algorithm.

QuickSort は worst case では O (n^2) になります。
欠点はスピードだけではありません。
複合ソートでは結果がグシャグシャになります。


[ 大宙麗亜ちゃんのコメント ]

私はまだ Perl で sort を使ったことがありませんが、
安心して使っていいわけですね。Sort を使う問題を出してください。

[ 0341: 次の記事 ]

[ 0340: 素数日プログラム ]

[ 0339: emirp 探し ]

[ 0338: 0331の解きなおし ]

[ 0337: ubuntu 20.04 へ upgrade ]

[ 0336: πの近似計算 ]

[ 0335: 0253 の振り返り ]

[ 0334: Data Camp Python ]

[ 0333: 原始ピタゴラス数をさがす ]

[ 0332: LaTex の使いかた ]

[ 0331: 青い三角形の面積 ]

[ 0330: 長方形の幅 ]

[ 0329: 三角関数の関数の最大最小 ]

[ 0328: IMO 過去問 9 ]

[ 0327: 1+2+3+...+無限 ]

[ 0326: 2分木 sort も含めた性能比較 ]

[ 0325: 最悪ケースでの sort 比較 ]

[ 0324: 0307の回答 ④ ]

[ 0323: 0307の回答 ③ ]

[ 0322: 0307の回答 ② ]

[ 0321: 0307の回答 ① ]

[ 0320: 前の記事 ]

[ トップページへ ]