Quicksort ist ein vergleichsbasierter Sortieralgorithmus, der nach dem Divide-and-Conquer-Prinzip (Teile und Herrsche) arbeitet. Er wurde 1960 von Tony Hoare entwickelt und gilt als einer der in der Praxis schnellsten Sortieralgorithmen. Das Grundprinzip lässt sich in drei Schritte gliedern:
Der Algorithmus terminiert, wenn eine Teilliste nur noch ein oder kein Element enthält – diese ist trivialerweise sortiert.
Quicksort wählt ein Pivot-Element und teilt das Array rekursiv – durchschnittlich O(n log n).
Die Wahl des Pivotelements hat entscheidenden Einfluss auf die Effizienz des Algorithmus:
Bei der Partitionierung werden die Elemente um das Pivot herum angeordnet. Zwei gängige Varianten sind:
Der folgende Pseudocode zeigt Quicksort mit Lomuto-Partitionierung:
algorithmus quicksort(A, links, rechts):
wenn links < rechts:
p = partition(A, links, rechts)
quicksort(A, links, p - 1)
quicksort(A, p + 1, rechts)
algorithmus partition(A, links, rechts):
pivot = A[rechts]
i = links - 1
für j = links bis rechts - 1:
wenn A[j] ≤ pivot:
i = i + 1
tausche A[i] mit A[j]
tausche A[i + 1] mit A[rechts]
gib (i + 1) zurückpublic static void quicksort(int[] arr, int lo, int hi) {
if (lo < hi) {
int p = partition(arr, lo, hi);
quicksort(arr, lo, p - 1);
quicksort(arr, p + 1, hi);
}
}
private static int partition(int[] arr, int lo, int hi) {
int pivot = arr[hi];
int i = lo - 1;
for (int j = lo; j < hi; j++) {
if (arr[j] <= pivot) {
i++;
int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;
}
}
int tmp = arr[i+1]; arr[i+1] = arr[hi]; arr[hi] = tmp;
return i + 1;
}Die Laufzeit von Quicksort hängt maßgeblich von der Pivot-Wahl ab:
Speicherverbrauch: Quicksort arbeitet in-place (kein zusätzliches Array nötig), benötigt aber O(log n) Speicher auf dem Call-Stack (Rekursion). Im Worst Case kann der Stack O(n) tief werden.
Beide Algorithmen nutzen Divide-and-Conquer, unterscheiden sich aber wesentlich:
Abitur-Tipp: Im Abitur wird häufig verlangt, Quicksort an einem konkreten Zahlenbeispiel Schritt für Schritt durchzuführen. Übe das Partitionierungsverfahren mit kleinen Arrays (5–8 Elemente). Achte darauf, die Pivot-Wahl und die Aufteilung in Teillisten klar zu dokumentieren. Ein Vergleich mit MergeSort hinsichtlich Laufzeit, Speicher und Stabilität ist ein Klassiker in Abiturklausuren.