28.3
Mergesort-Algorithmus 28.3.1 Die Idee des Mergesort-Algorithmus |
|
J. v.
Neumann
mehr zum "von- |
Entwickelt
wurde der Mergesort-Algorithmus von John von Neumann (geb. 28.12.1903 in
Budapest, Ungarn, gestorben am 08.02.1957 in Washington D.C., USA.). J.
v. Neumann war Mathematiker, schrieb als solcher 1932 das Werk
"Mathematische Grundlagen der Quantenmechanik" und gilt als einer der
Computerpioniere. Er entwarf die Architektur eines Rechner. Die der
Architektur zu Grunde liegenden Konzepte gelten heute noch, weshalb man
die heutigen Rechner "von Neumann - Rechner" Rechner nennt: So verlangt die von Neumann - Architektur, dass
Dieses Konzept 'verlang' auch eine entsprechende Architektur auf der Hardwareseite:
|
1945 entwickelte J. v. Neumann das Konzept für den Mergesort-Algoirithmus. Wie der Quicksort-Algorithmus gehört auch der Mergesort-Algorithmus zu der Klasse der 'divide and conquer'-Algorithmen. Er folgt also auch der Strategie: Teile das Problem. Löse dieses und erzeuge aus den Teillösungen die Gesamtlösung. | |
Konkret | Zur Veranschaulichung des Algorithmus' gehen wir von einer 4-elementigen Liste aus, die wir in 2 Teillisten zerlegen (partition). Diese werden jeweils in 1 elementige Listen zerlegt. Diese Zerlegung geschieht bei einem rekursiven Abstieg. Beim rekursiven (Wieder)aufstieg werden die Teillisten wieder zusammengmischt (merge). Bei diesem Mischen geschieht das eigentliche Sortieren. Ganz unten, wir haben 1 elemetige Teillisten, sind diese a priori sortiert. Beim Aufstieg wird das Zusammenfügen so organisiert, dass die neu entstehenden, jetzt größeren Teillisten sortiert sind. |
Wie wir
gesehen haben, besteht die eigentliche Sortierarbeit im Zusammenfügen
zweier sortierter Listen zu einer neuen, wieder sortierten Liste.
Betrachten wir also das Zusammenfügen genauer Die Situation: Wir sind beim rekursiven Aufstieg und haben unsere Liste a, die zwei sortierte Teillisten enthält. Wir kopieren die Liste in eine Hilfsliste b. Die Position m markiert das am weitesten rechts stehende Element der linken Teilliste. |
|
Wir beginnen mit dem Zusammenfügen. Ziel ist dabei die sortierte Liste a, in der dabei Schritt für Schritte die alten Elemente überschrieben werden. Wir setzen dazu die 'Zeiger' i und k auf das jeweils ersten Plätze der Teillisten. Der Zeiger k zeigt auf ersten Platz der neuen Liste. Der Vergleich der Werte an den Positionen i u´nd k zeigt, dass am Platz k der kleiner Wert steht, der deshalb an die Stelle k der Liste a kopiert wird. Die Zeiger j und k springen um eine Stelle weiter. | |
Jetzt sind die Werte an den Platzen j und k gleich. IN diesem Fall wird der Wert vom Platz i an die Stelle k der Liste a kopiert. Jetzt werden i und k um 1 erhöht. | |
Der Wert 1 wird nach a kopiert | |
Der Wert 2 wird nach a kopiert. | |
Dies setzt sich so fort | |
bis | |
eine Teilliste leer ist | |
Da die Teillisten sortiert sind, kann der übrig gebliebene Rest der noch nicht leeren Teilliste auf einen 'Rutsch' in die Liste a kopiert werden | |
zu | 28.3.2 Implementierung des Mergesort-Algorithmus |
zur Startseite | www.pohlig.de (C) MPohlig 2006 |