Übungsaufgaben
Zehn Übungen zum Klicken, Zuordnen, Rechnen und Knobeln — von AFB I bis AFB III. Jede Übung gibt sofort Rückmeldung; wenn du nicht weiterkommst, helfen die gestuften Tipps.
Gib für jede Aussage über Mergesort an, ob sie stimmt.
Beschreibe das Mischen zweier sortierter Hälften, indem du die Lücken füllst.
Zwei stehen auf den Anfängen der beiden sortierten Hälften. Das der beiden Elemente kommt in die , dann rückt sein Zeiger vor. Ist eine Hälfte leer, wird der der anderen ohne übernommen. Am Ende wird die Hilfsreihung in den Bereich .
mische: zwei Indizes, eine Schleife, zwei Rest-Schleifen, Zurückkopieren.Die sortierten Hälften sind 6, 19, 33 und 4, 21, 25, 40. Wende das Mischen an: Trage in jeder Zeile den übernommenen Wert ein und gib die Zahl der Vergleiche an.
| Vergleich | a[i] | a[j] | übernommen |
|---|---|---|---|
| 1 | 6 | 4 | |
| 2 | 6 | 21 | |
| 3 | 19 | 21 | |
| 4 | 33 | 21 | |
| 5 | 33 | 25 | |
| 6 | 33 | 40 | |
| Rest | leer | 40 | |
| Vergleiche |
mergesort(a, 0, 3) wird aufgerufen. Stelle dar, in welcher Reihenfolge die Aufrufe von mergesort und mische beginnen, indem du die Karten ordnest.
mergesort(a, 0, 3)
mergesort(a, 0, 1)
mergesort(a, 0, 0)
mergesort(a, 1, 1)
mische(a, 0, 0, 1)
mergesort(a, 2, 3)
mergesort(a, 2, 2)
mergesort(a, 3, 3)
mische(a, 2, 2, 3)
mische(a, 0, 1, 3)
mische), bevor die rechte beginnt. Das letzte mische verbindet die beiden sortierten Hälften.Mergesort sortiert 16 Elemente. Beim Mischen zweier Hälften mit je \(p\) Elementen fallen höchstens \(2p - 1\) Vergleiche an. Berechne die Werte für den ungünstigsten Fall.
- Anzahl der Misch-Ebenen: Ebenen
- Ebene 2 (vier Mal 2 + 2 Elemente): Vergleiche
- Ebene 4 (einmal 8 + 8 Elemente): Vergleiche
- Alle Ebenen zusammen: Vergleiche
Ordne jedem Verfahren die Eigenschaft zu, die es von den anderen unterscheidet.
Eine Mitschülerin hat mische(a, links, mitte, rechts) geschrieben; sie soll stabil aufsteigend mischen. Überprüfe den Quelltext und markiere die drei fehlerhaften Zeilen.
|| läuft die Hauptschleife weiter, obwohl eine Hälfte leer ist, und greift über ihr Ende hinaus. Mit j = mitte gehört a[mitte] zu beiden Hälften und wird doppelt übernommen.Mergesort erhält die bereits aufsteigend sortierte Reihung 1, 2, 3, …, 16. Ermittle die Anzahl der Vergleiche.
1, 2 und 3, 4?Entscheide für jede Situation, welches Sortierverfahren am besten passt.
Mergesort soll absteigend und weiterhin stabil sortieren. Verändere die Methode mische, indem du die Lücken füllst.
static void mische(int[] a, int links, int mitte, int rechts) {
int[] hilf = new int[rechts - links + 1];
int i = links, j = , k = 0;
while (i <= mitte j <= rechts) {
if (a[i] a[j]) { hilf[k] = a[i]; i++; }
else { hilf[k] = a[j]; j++; }
k++;
}
while (i <= mitte) { hilf[k] = a[i]; i++; k++; }
while (j <= rechts) { hilf[k] = a[j]; j++; k++; }
for (k = 0; k < hilf.length; k++) a[links + k] = hilf[];
}
>= gewinnt bei Gleichheit weiterhin das linke Element — stabil. Mit > wäre die Folge zwar absteigend, aber nicht stabil. hilf beginnt bei Index 0, der Zielbereich bei links.