0

C でクイックソートの実装を実装しましたが、パフォーマンスを悪化させるにはどのような入力が必要かを理解しようとしています。

ウィキペディアによると:

このように常にパーティションの最後の要素をピボットとして選択すると、既にソートされたリストまたは同一の要素のリストでパフォーマンスが低下します (n^2)。

それで私はそれをやろうとしましたが、その結果、次のコードが得られました。ピボットは常に最後の要素であり、入力は既にソートされたリストです。

複雑さが実際に n^2 であることを証明するために、反復ごとにインクリメントするグローバル変数を作成し、最後に出力します。

プログラムが次のように出力されることを期待していました。

Done in 64 iterations

ただし、28回の反復でそれを行いました。「複雑さ」という用語に対する私の理解が間違っているのでしょうか。

4

2 に答える 2

1

反復回数は、n=8 で 28 回です。

反復回数はn*(n-1)/2= 8*7/2 = 28 です。

関数はf(n)=n*(n-1)/2 = n 2 /2 - n/2です。

f ( n) = O(n 2 /2 - n/2) = O((1/2)n 2 ) = O(n 2 )です。

したがって、入力は実際にはクイックソートの最悪のケースです。

于 2013-03-31T11:20:25.047 に答える