Dieser Beweis ist ein Beweis durch Induktion und lautet wie folgt:
P (n) ist die Behauptung, dass "Quicksort jedes Eingabearray der Länge n korrekt sortiert".
Basisfall: Jedes Eingabearray der Länge 1 ist bereits sortiert (P (1) gilt)
Induktiver Schritt: Fix n => 2. Fixiere ein Eingabearray der Länge n.
Muss zeigen: Wenn P (k) für alle k <n gilt, gilt auch P (n)
Dann zeichnet er ein Array A, das um einen Pivot p verteilt ist. Also zeichnet er p und nennt den Teil des Arrays, der <p ist, als 1. Teil, und der Teil, der> p ist, ist der zweite Teil. Die Länge von Teil 1 = k1 und die Länge von Teil 2 ist k2. Durch den Korrektheitsnachweis der Partitionsunterroutine (früher bewiesen) wird der Drehpunkt p in der richtigen Position aufgewickelt.
Durch induktive Hypothese: 1., 2. Teil werden durch rekursive Aufrufe korrekt sortiert. (Mit P (K1), P (k2))
Also: Nach rekursiven Aufrufen wird das gesamte Array korrekt sortiert.
QED
Meine Verwirrung : Ich habe große Probleme, genau zu sehen, wie dies die Richtigkeit beweist. Wir nehmen also an, dass P (k) tatsächlich für alle natürlichen Zahlen k <n gilt.
Die meisten Induktionsbeweise, die ich bisher gesehen habe, gehen ungefähr so: Beweisen Sie den Basisfall und zeigen Sie, dass P (n) => P (n + 1). Sie beinhalteten normalerweise auch eine Art algebraische Manipulation. Dieser Beweis scheint sehr unterschiedlich zu sein, und ich verstehe nicht, wie ich das Konzept der Induktion darauf anwenden soll. Ich kann etwas begründen, dass die Richtigkeit der Partition-Subroutine der Schlüssel ist. Die Begründung für die Richtigkeit lautet also wie folgt: Wir wissen, dass bei jedem rekursiven Aufruf das Array um einen Pivot aufgeteilt wird. Dieser Drehpunkt befindet sich dann in seiner rechtmäßigen Position. Dann wird jedes Subarray weiter um einen Drehpunkt verteilt, und dieser Drehpunkt befindet sich dann in seiner rechtmäßigen Position. Dies geht so lange weiter, bis Sie ein Subarray der Länge 1 erhalten, das trivial sortiert ist.
Aber dann nehmen wir nicht an, dass P (k) für alle k <n gilt ... wir ZEIGEN tatsächlich, dass dies der Fall ist (da die Partition-Subroutine immer ein Element in seine rechtmäßige Position bringt). Gehen wir nicht davon aus, dass P. (k) gilt für alle k