Im folgenden sei die einfachste nicht-rekursive Lösung des MergeSorts aufgezeigt. Tatsächlich
führt diese Implementierung die Abarbeitung in etwas anderer Weise durch als die rekursive Variante.
Wie ersichtitlich in der nachstehenden Tabelle, ist die Arbeitsweise der hier vorgestellten iterativen
Implementierung eine andere. Es werden von links nach rechts kleine Mengen, zuerst bestehend aus einem Element,
zu Zweiermengen mit Hilfe der merge-Funktion gebildet. Dananch werden diese Zweiermenge zu Vierergruppen
gemischt. Dann diese zu Achtermengen ... usw.
18 | 35 | 22 | 10 | 12 | 25 | 13 | 31 | 1 | 8 | 0 | 16 | 4 |
18 | 35 | |||||||||||
10 | 22 | |||||||||||
12 | 25 | |||||||||||
13 | 31 | |||||||||||
1 | 8 | |||||||||||
0 | 16 | |||||||||||
4 | ||||||||||||
10 | 18 | 22 | 35 | |||||||||
12 | 13 | 25 | 31 | |||||||||
0 | 1 | 8 | 16 | |||||||||
4 | ||||||||||||
10 | 12 | 13 | 18 | 22 | 25 | 31 | 35 | |||||
0 | 1 | 4 | 8 | 16 | ||||||||
0 | 1 | 4 | 8 | 10 | 12 | 13 | 16 | 18 | 22 | 25 | 31 | 35 |
In der folgenden Implementierung gibt die Variable step die Größe der
zu mischenden Mengen an. left und right dagegen begrenzen begrenzen
die Menge. In der äußeren Schleife wird das Ablaufen der Iterationen kontrolliert.
Die innere Schleife dagegen sorgt für die jeweilige Aufteilung in Mengen und ruft
die merge-Funktion auf, um die entstehenden Mengen zu sortieren. Die beiden
Parameter definieren die zu sortierende Menge. data ist die Adresse des Arrays,
N die Anzahl Elemente im Array.
Nächste Seite: ``in-place''
Aufwärts: Implementierung
Vorherige Seite: rekursiv
Inhalt