QuickSort()関数が最初に呼び出されたときの比較
lower<=upper&&data[lower]<=div
lower<=upper&&data[upper]>div
の実行回数
は、

回である。そして、再帰
呼び出しにより、

個と

個の場合の
QuickSort()が呼び出されることにな
る。

個の時のトータルの比較回数を

として、これらの関係は、
 |
(1) |
となる。もちろん、

と

は、

〜

の値を取りうる。そして、
sort[]に格納されている値がランダムであれば、同じ確率で

〜

の値をとる。さ
らに、

と

の和は

になることはクイックソートのアルゴリズムから自明
である。したがって、

の期待値は、
となる。この漸化式から、

を求めることになるが、計算は結構大変である。まず、
式(
2)を
と変形しておく。つぎに、この式の

を

にした場合の式
を利用する。式(
3)から式(
4)の辺々を差し引いて整理す
ると、
 |
 |
(5) |
となる。さらに、整理を進めると
 |
 |
(6) |
となる。両辺を、

で割ると、
となる。ここで、

を

と置くと、
 |
(8) |
となり、階差数列を用いて容易に計算できる。すなわち、
 |
(9) |
である。

より、

となるので、
となる。ここで、

が大きい場合、

は

に近
づくことが知られている
4。

はオイラー数と言われる定数で、その値は0.577

である。したがって、

が大きい場合、
 |
(11) |
となる。右辺の

は他の項に比べて大きな値を取る
5。したがって、
 |
(12) |
となる。

の定義から、
 |
(13) |
となる。
はsort[]の要素の比較回数を表す。したがって、
が大きい場合の比較回数は、
となる。
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成17年10月27日