最大要素をピボットとして選択した場合、Quicksortには常に2次ランタイムがありますか?


9

クイックソートアルゴリズムがあり、常に最小(または最大)の要素をピボットとして選択する場合。すでにソートされたデータセットを提供すると、「すでにソートされた」リストが昇順か降順かに関係なく、常に最悪のパフォーマンスが得られると私は思いますか?

私の考えでは、ピボットの最小要素を常に選択する場合、ピボットに対してソートするように選択されたサブセットは常に同じサイズ?


2
あなたの考えは正しいですが、この場合、直接議論してクイックソートの実行時間を計算することもできます取得します。O(n2)
Yuval Filmus

回答:


15

クイックソートの最悪の場合の複雑さはです。これは、1つのグループに単一のメンバーのみが含まれるようにセットを分割するピボットを選択することによって実現されます。ピボットピッキングアルゴリズムが不適切な場合、これは、ソートされたセットの一方の端をピッキングすることで簡単に実現できます。あなたの仮定は正しいです。Θ(n2)


2
「...これは、1つのグループがO(1)メンバーのみを持つようにセットを分割するピボットを選択することによって達成されます」

@Saeed Amiri:その通りですが、正確である方がいいです。
MMS

1
@SaeedAmiri:O(1)は、1に比例することを示します。つまり、k * 1になる可能性があります。実際の最悪のケースは正確に1のときに達成されます。O(1)がまだO(n ^ 2)につながる可能性があることを認めます。
walrii 2012

@MMS、私はを正確に書いた、walriiあなたが書いた:「クイックソートの最悪のケースの複雑さは ..」ですが、実際にはを実現する唯一の方法ですはあなたが言った方法ではありません、はい、あなたが説明した方法はすべてで最悪の場合ですが、だけではありません。Θ n 2Θ n 2Θ n 2O(1)Θ(n2)Θ(n2)Θ(n2)

5

はい!あなたは完全に正しいと考えています!そして、Yuval Filmusによって正しく述べられているように、実行時間は Θ(n2)


3

1つのサブ配列にはまたは要素があり、もうつのサブ配列には要素があります。したがって、それはです: 1 n 1 O n 2t n = t n 1 + t 0 + O n = O n 201(n1)O(n2)

t(n)=t(n1)+t(0)+O(n)=O(n2)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.