このような問題は、ほとんどを有することが知られています。
最悪の分割を持つことになり、時間複雑度はO(N ^ 2)、なぜ高速であってもよいヒープソート下限O(nlgn)に達すると、アルゴリズムをソート比較的プログレッシブ最適であるが、高速行の特定の可能性がありますヒープソートより通常優れている実際の使用に来ましたの?
ちょうど昨日は、高速行の最適化についての記事を書いた、今日の比較は、それの複数の操作を行います。ソートアルゴリズムダイアグラムを初めて目:
Sortメソッド | 平均ケース | ベストケース | 最悪の場合 | 補助スペース | 安定 |
---|---|---|---|---|---|
バブルソート | O(n^2) | O(n) | O(n^2) | O(1) | 安定しました |
単純な選択ソート | O(n^2) | O(n^2) | O(n^2) | O(1) | 安定しました |
直接挿入ソート | O(n^2) | O(n) | O(n^2) | O(1) | 安定しました |
シェルソート | O(nlogn)〜O(N ^ 2) | O(n^1.3) | O(n^2) | O(1) | 不安定な |
ヒープソート | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不安定な |
マージソート | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 安定しました |
クイックソート | O(nlogn) | O(nlogn) | O(n^2) | (LOGN)〜(N) | 不安定な |
それは、ソートやクイックソートマージnlognレベルソートアルゴリズム、3、すなわち、ヒープの並べ替えの合計を、到着見ソートする唯一の最も安定したマージすることができます。それでは、なぜクイックソートの平均場合は最速ですか?
実際には、アルゴリズム解析は、大規模Oの役割は、下限の数を増やすのではなく、下限が与えられます。したがって、アルゴリズムの複雑さは、単に時間が同一の実装ではなく、様々なソートアルゴリズムの前のような異なる定数パラメータがたくさんの数式されている、データ量が増加し、同じアルゴリズムの時間コストの増加傾向として述べcは、cは、おそらく10〜100であるが、それは迅速なソート・ヒープ・ソートに大きなO.には影響を与えない一定のレベルであるため、それがためにある省略
また、同じアルゴリズムは、異なる人々がさまざまなシナリオの下で、コードの実行時間を記述する場合にも非常に異なる場合があります。ここでは、テストデータは次のとおりです。
测试的平均排序时间:数据是随机整数,时间单位是s
数据规模 快速排序 归并排序 希尔排序 堆排序
1000万 0.75 1.22 1.77 3.57
5000万 3.78 6.29 9.48 26.54
1亿 7.65 13.06 18.79 61.31
ヒープソート各スタックとデータ交換の最大の下、ヒープの再上映、代わりにX調整のヒープのトップを取って、まだ非常に可能性がある(ヒープXの底が明らかにヒープの下に比較的小さな調整で、 )一番下になり、その後、ヒープの上部と再び最大交流し、その後はダウン調整し、ヒープソートは無駄な努力の多くを行って言うことができます。
、速い行最悪時間計算量が高いですが、彼らは一定であるものの、高速スイッチング時間と統計的な意味では、このようなデータの確率が非常に小さく表示され、行の交換プロセスでのヒープソート処理が、総括しかし、一定の時間がたくさんより悪いです。