Hat Quicksort immer eine quadratische Laufzeit, wenn Sie ein maximales Element als Drehpunkt auswählen?


9

Wenn Sie einen Schnellsortieralgorithmus haben und immer das kleinste (oder größte) Element als Drehpunkt auswählen; Habe ich Recht, wenn Sie einen bereits sortierten Datensatz bereitstellen, erhalten Sie immer die schlechteste Leistung, unabhängig davon, ob Ihre "bereits sortierte" Liste in aufsteigender oder absteigender Reihenfolge vorliegt?

Ich denke, wenn Sie immer das kleinste Element für Ihren Pivot auswählen, spielt es keine Rolle, ob Ihre 'bereits sortierte' Eingabe nach aufsteigend oder absteigend sortiert ist, da die Teilmenge, die relativ zu Ihrem Pivot sortiert werden soll, immer die ist gleiche Größe?


2
Ihr Denken ist richtig, aber Sie können in diesem Fall auch direkt argumentieren und die Laufzeit von Quicksort berechnen - Sie erhalten . O(n2)
Yuval Filmus

Antworten:


15

Die Worst-Case-Komplexität für Quicksort ist . Dies wird erreicht, indem Drehpunkte ausgewählt werden, die die Menge so teilen, dass eine Gruppe nur ein einziges Mitglied hat. Mit einem schlechten Pivot-Picking-Algorithmus kann dies leicht erreicht werden, indem ein Ende eines sortierten Satzes ausgewählt wird. Ihre Annahme ist richtig.Θ(n2)


2
Es war besser, es zu schreiben: "... Dies wird erreicht, indem Drehpunkte ausgewählt werden, die die Menge so teilen, dass eine Gruppe nur ein O (1)

@Saeed Amiri: Das stimmt, aber es ist besser, genau zu sein.
MMS

1
@SaeedAmiri: O (1) gibt an, dass es proportional zu 1 ist, was bedeutet, dass es k * 1 sein kann. Der tatsächliche schlimmste Fall wird erreicht, wenn er genau 1 ist. Ich gebe Ihnen zu, dass O (1) immer noch zu O (n ^ 2) führen kann.
Walrii

@MMS, ich habe , um genau zu sein, walrii Sie haben geschrieben: "Die Worst-Case-Komplexität für Quicksort ist ..", aber tatsächlich der einzige Weg, um ist nicht die Art, wie du es gesagt hast, ja, die Art, wie du sie beschrieben hast, ist der schlimmste Fall überhaupt, aber nicht die einzige . O(1)Θ(n2)Θ(n2)Θ(n2)

5

Ja! Du denkst, es ist absolut richtig! Und wie von Yuval Filmus richtig erwähnt, wird die Laufzeit Θ(n2)


3

Ein Subarray hat oder Element, während das andere Elemente hat; daher ist es : 01(n1)O(n2)

t(n)=t(n1)+t(0)+O(n)=O(n2)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.