Prinzip
Teile-und-herrsche bedeutet:
Problem zerlegen, Teilprobleme lösen, Ergebnisse nutzen oder zusammenführen.
Viele Teile-und-herrsche-Verfahren sind rekursiv formulierbar, aber nicht jede
Rekursion ist automatisch Teile-und-herrsche.
Quicksort als rekursives Sortierbeispiel
void quicksort(int[] a, int links, int rechts) {
if (links >= rechts) return; // Basisfall
int pivotIndex = partition(a, links, rechts);
quicksort(a, links, pivotIndex - 1); // linkes Teilproblem
quicksort(a, pivotIndex + 1, rechts); // rechtes Teilproblem
}
sort([7 2 9 4 1 8 3])
→ Pivot 4: [2 1 3] | 4 | [7 9 8]
→ sort([2 1 3]) und sort([7 9 8])
→ Basisfälle entstehen bei leeren oder einelementigen Bereichen
→ Ergebnis: [1 2 3 4 7 8 9]
Quicksort ist typischerweise effizient, wenn die Pivotwahl ausgewogene Teilbereiche
erzeugt. Bei ungünstiger Pivotwahl können die Teilprobleme fast so groß wie vorher
bleiben; dann kann Quicksort im Worst Case quadratische Laufzeit erreichen.