Informatik für Lehrkräfte
Informatik für Lehrkräfte
Informatik für Lehrkräfte
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
I N FORMATIK F Ü R L EHRKRÄFTE 143<br />
Übungsaufgabe: Quick Sort dokumentieren<br />
Welche Aufrufe von partition! werden beim Aufruf von quick_sort!(a)<br />
mit a = [3,2,1,6,7,4,8,5] in welcher Reihenfolge ausgeführt? Geben<br />
Sie an, welchen Wert a vor und nach jedem Aufruf von partition! hat.<br />
Merge Sort<br />
Schließlich lernen wir noch ein Sortierverfahren kennen, deren Laufzeit<br />
auch im schlechtesten Fall in O(n · log 2 (n)) ist. Auch dieses Verfahren<br />
verwendet zwei rekursive Aufrufe zum Sortieren von Teilarrays, stellt<br />
aber sicher, dass sich dabei die Array-Größen unabhängig von den Array-<br />
Elementen halbieren, wodurch logarithmische Rekursionstiefe garantiert<br />
wird.<br />
Intuitiv können wir das Verfahren wie folgt beschreiben:<br />
1. Teile das Eingabe-Array in zwei Hälften und sortiere diese rekursiv.<br />
2. Durchlaufe dann die sortierten Hälften und füge sie zu einem Array<br />
zusammen, dass alle Elemente in sortierter Reihenfolge enthält.<br />
Die rekursiven Aufrufe verfahren nach dem selben Prinzip. Für die<br />
Eingabe [3,2,1,6,7,4,8,5] ergeben sich also die folgenden Zwischenschritte.<br />
Hierbei fassen wir Operationen auf gleicher Rekursionstiefe<br />
zusammen. Bei diesem Array der Größe acht ergeben sich also drei<br />
Schritte.<br />
• [3,2,1,6,7,4,8,5]<br />
• [2,3,1,6,4,7,5,8]<br />
• [1,2,3,6,4,5,7,8]<br />
• [1,2,3,4,5,6,7,8]<br />
Übungsaufgabe: Merge Sort implementieren und analysieren<br />
Definieren Sie eine rekursive Ruby-Funktion (keine Prozedur)<br />
merge_sort, die das Merge Sort Verfahren implementiert. Das<br />
Eingabe- Array soll von dieser Funktion nicht verändert werden. 1 Nach<br />
zwei rekursiven Aufrufen sollen die sortierten Hälften zusammengefügt<br />
werden. Definieren Sie dazu eine Funktion merge mit zwei Arrays als<br />
Parametern, die als Ergebnis ein sortiertes Array mit den Elementen<br />
beider Parameter liefert.<br />
Untersuchen Sie Ihre Implementierung experimentell. Wie verhalten<br />
sich die Laufzeiten in Abhängigkeit von der Eingabegröße?<br />
1<br />
Es ist nicht leicht den Merge-Schritt von<br />
Merge Sort in place, das heißt durch direkte<br />
Manipulation des Eingabe-Arrays zu<br />
implementieren. Einfacher ist es, ein neues<br />
Array zu erzeugen, dass die zusammengefügten<br />
Elemente enthält.