11.10.2013 Aufrufe

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

teile L in L1 <strong>und</strong> L2;<br />

setze L1 = MergeSort (L1);<br />

setze L2 = MergeSort (L2);<br />

return Merge(L1,L2);<br />

fi;<br />

algorithm Merge (L1,L2: Liste): Liste<br />

setze ERGEBNIS = leere Liste;<br />

while L1 oder L2 nicht leer<br />

do<br />

entferne das kleinere von den Anfangselementen von<br />

L1 <strong>und</strong> L2 aus der jeweiligen Liste <strong>und</strong> hänge es an<br />

ERGEBNIS an;<br />

od;<br />

return ERGEBNIS;<br />

3.2. Sortieren<br />

Der Vorgang des Mischens erfordert in der Regel doppelten Speicherplatz (oder<br />

aufwendiges Verschieben)!<br />

Auch: Sortieren durch Verschmelzen, [Lek93].<br />

3.2.6. Quick-Sort<br />

Quick-Sort arbeitet ähnlich wie Merge-Sort durch rekursive Aufteilung. Der Mischvorgang<br />

wird dadurch vermieden, daß die Teillisten bezüglich eines Referenzelementes<br />

in zwei Hälften aufgeteilt werden, von denen die eine alle Elemente größer<br />

als das Referenzelement enthält, die andere die kleineren.<br />

algorithm QuickSort1 (L: Liste): Liste<br />

bestimme Teilungselement PIVOT;<br />

teile L in L1 <strong>und</strong> L2 so daß gilt:<br />

alle Elemente in L1 sind kleiner als PIVOT, <strong>und</strong><br />

alle Elemente in L2 sind größer als PIVOT;<br />

if L1 oder L2 hat mehr als ein Element<br />

then<br />

setze L1 = QuickSort (L1);<br />

setze L2 = QuickSort (L2);<br />

fi;<br />

return L1 + [ PIVOT ] + L2;<br />

PIVOT kann etwa als erstes Element des Feldes gewählt werden, oder auch als mittleres<br />

Element (besonders günstig, falls die Eingabe auch vorsortiert sein könnte!),<br />

oder als Mittelwert des ersten, des letzten <strong>und</strong> des mittleren Elements.<br />

Die Realisierung mit einem Feld (array of int) kann die Aufteilung in L1 <strong>und</strong> L2<br />

ohne weiteren Speicherplatzbedarf innerhalb des Feldes erfolgen:<br />

57

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!