Eine etwas anspruchsvollere, aber wesentlich effizientere Version des QuickSort ist die iterative Variante. Um die Effizienz
dieser Implementirung im Vergleich zur Rekursion zu unterstreichen, sei an dieser Stelle auf den Abschnitt Laufzeitkomplexität
verwiesen. Da bei der rekursiven Variante, das Problem des Speicherplatzes entsteht, versucht die iterative Lösung den Speicherverbrauch
zu minimieren. Beim Ablauf des Algorithmus muss gegebenenfalls auf Werte (Indizes) aus vorherigen Iterationen zurückgriffen werden, weswegen
die im Folgenden vorgestellte Funktion explizit einen Stack verwendet. Der Clue hier ist, sich nur die notwendigste Information
abzuspeichern und somit das Wachsen des Stacks zu reduzieren. Dies wird dadurch erreicht, daß die Teilmengen nicht in einer beliebegen
Ordnung abgearbeitet, sondern auf ihre Größe verglichen werden. Nur die grössere Menge wird auf dem Stack abgelegt, wobei die
Klenere sofort weiterbearbeitet wird. (Abgelegt wird tatsächlich nur die Information durch welche Indizes die Menge begrenzt ist).
Im folgenden Listing bezeichen die Funktionen push, pop, stack_init und stack_is_emtpy Operationen
auf dem explizit verwendeten Stack.
Nächste Seite
Aufwärts
Vorherige Seite
Inhalt
Nächste Seite: Optimierung
Aufwärts: Implementierung
Vorherige Seite: rekursiv
Inhalt
2002-05-09