標準アルゴリズムコースでは、クイックソートは平均でであり、最悪の場合はであると教えられてい。同時に、最悪の場合(mergesortやheapsortのようなであり、最高の場合(bubblesortのような)線形時間であるが、メモリの追加の必要性がある他のソートアルゴリズムが研究されています。O (n 2)O (n log n )
いくつかの実行時間をひと目見た後、クイックソートは他の効率ほど効率的であってはならないと言うのが自然です。
また、学生は基本的なプログラミングコースで、再帰があまりにも多くのメモリを使用するなどの理由であまり良くないことを学ぶと考えてください。したがって(これは本当の議論ではありませんが)、これはクイックソートがそうではないという考えを与えますそれは再帰アルゴリズムであるため、本当に良いです。
それでは、実際には、クイックソートが実際に他のソートアルゴリズムよりも優れているのはなぜですか?実世界のデータの構造に関係していますか?コンピューターのメモリの動作方法に関係していますか?一部のメモリは他のメモリよりもはるかに高速であることは知っていますが、それがこの直感に反するパフォーマンスの本当の理由であるかどうかはわかりません(理論的な推定と比較した場合)。
1更新:正規答えはに関与定数と言っている平均的な場合の、他のに関与する定数よりも小さいアルゴリズム。ただし、直感的なアイデアだけではなく、正確な計算を使用して、これを適切に正当化する方法はまだありません。O (n log n )
いずれにせよ、いくつかの答えが示唆するように、メモリレベルでは実装がコンピューターの内部構造を利用し、たとえばキャッシュメモリがRAMよりも速いことを使用して、本当の違いが生じるようです。議論はすでに興味深いものですが、答えはそれに関係しているように思われるので、メモリ管理に関してさらに詳細を見たいと思います。
更新2:ソートアルゴリズムの比較を提供するいくつかのWebページがあり、一部は他よりも洗練されています(最も顕著なのはsort-algorithms.com)。素晴らしい視覚補助を提示する以外に、このアプローチは私の質問に答えません。