MINT lernen

Übungen: Selectionsort

Zehn Übungen zu Selectionsort — von der ersten Runde bis zur Frage, warum Sortiertes nicht schneller geht.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Zehn Übungen zum Auswählen, Zählen und Korrigieren — von AFB I bis AFB III. Jede Übung gibt sofort Rückmeldung; wenn Sie nicht weiterkommen, helfen die gestuften Tipps.

A1
Runde für Runde auswählen
AFB I

Ein Quiz speichert die Punktzahlen punkte = {31, 8, 54, 19, 42, 5}. Wenden Sie Selectionsort (aufsteigend) auf diese Reihung an.

Wählen Sie in jedem Menü den passenden Eintrag und prüfen Sie dann alle auf einmal.

Minimum in Runde 1:

In Runde 1 werden die Indizes getauscht:

Reihung nach Runde 2:

Reihung nach Runde 3:

Echte Vertauschungen insgesamt:

Runde 1 tauscht 31 und 5 → 5 8 54 19 42 31. In Runde 2 steht 8 schon vorn: kein Tausch. Runde 3 tauscht 54 und 19, Runde 4 tauscht 54 und 31, Runde 5 findet 42 schon an seinem Platz. Also 3 echte Vertauschungen bei 5 Runden. Häufiger Fehler: in Runde 3 wird 19 mit dem Nachbarn getauscht statt mit dem ersten Element des unsortierten Teils.
Ansatz: Markieren Sie nach jeder Runde den sortierten Teil mit einem Strich; gesucht wird nur rechts davon.
Weiter: Getauscht wird immer mit dem ersten Element des unsortierten Teils, also mit Index 0, 1, 2, …
A2
Stimmt's? — Fünferserie
AFB I

Geben Sie zu jeder Aussage über Selectionsort, ob sie stimmt.

5 Aussagen nacheinander. Eine falsche Einschätzung reicht — dann starten Sie die Serie mit „Neue Runde“ neu.
Aussage 1 von 5

Die Zahl der Vergleiche hängt bei Selectionsort nur von \(n\) ab. Von der Anordnung hängt nur ab, wie viele Runden wirklich etwas vertauschen.
Ansatz: Denken Sie an das Applet: Was ist nach jeder Runde grün?
Weiter: Die Summe \((n-1)+\ldots+1\) liefert für \(n=6\) den Wert \(15\).
A3
Code-Lücken füllen
AFB I

Die Methode soll die Reihung a mit Selectionsort aufsteigend sortieren. Ordnen Sie jeder Lücke den passenden Baustein zu — zwei Bausteine bleiben übrig.

Baustein anklicken, dann Lücke anklicken (oder umgekehrt) — mit Tab und Enter geht es genauso. Ein Klick auf eine gefüllte Lücke legt den Baustein zurück.

for (int i = 0; i < a.length - 1; i++) {
  int minPos = ;
  for (int j = ; j < a.length; j++)
    if (a[j] < ) minPos = j;
  int hilf = ;
  a[i] = a[minPos];
  a[minPos] = ;
}

Mit minPos = 0 würde jede Runde wieder im schon sortierten Teil anfangen. a[j] in der Bedingung vergliche das Element mit sich selbst. Der Tausch braucht die Hilfsvariable, weil a[i] in der Zeile davor schon überschrieben wird.
Ansatz: Der erste Kandidat für das Minimum ist das erste Element des unsortierten Teils.
Weiter: Gemerkt wird der alte Wert von a[i], bevor er überschrieben wird — er kommt am Ende nach a[minPos].
A4
Tracetabelle ausfüllen
AFB II

Ein Fahrradladen sortiert Rahmenhöhen in cm: rahmen = {47, 18, 90, 26, 13}. Stellen Sie den Ablauf von Selectionsort in der Tracetabelle dar: Position des Minimums und Reihung nach jeder Runde.

Füllen Sie alle Felder aus und prüfen Sie dann. Reihungen mit Leerzeichen oder Kommas trennen, z. B. 1 2 3 4 5. Enter prüft ebenfalls.
RundeiminPosrahmen danach
10
21
32
43
Runde 2 und die letzte Runde sind die Stolpersteine: In Runde 2 steht 18 schon an Index 1 (minPos = i, keine Änderung). In Runde 4 ist 47 an Index 4 kleiner als 90 an Index 3 — dieser letzte Tausch sortiert die beiden größten Werte. Insgesamt 10 Vergleiche und 3 echte Vertauschungen.
Ansatz: minPos ist ein Index, kein Wert. Suchen Sie das Minimum immer nur ab Index i.
Weiter: Runde 1: Minimum 13 an Index 4, Tausch mit Index 0 → 13 18 90 26 47.
A5
Drei Fehler im Code
AFB II

Lina hat Selectionsort für die Reihung z programmiert, doch die Ausgabe ist falsch sortiert. Überprüfen Sie jede Zeile und korrigieren Sie die fehlerhaften.

Klicken Sie die fehlerhaften Zeilen an und tragen Sie jeweils die korrigierte Zeile ein. Leerzeichen spielen keine Rolle.
Zeile 2 startet jede Suche bei Index 0, also im schon sortierten Teil. Zeile 4 vergleicht mit dem festen z[i] statt mit dem bisher besten Kandidaten — dann gewinnt nicht das Minimum, sondern das letzte Element kleiner als z[i]. Zeile 8 schreibt den schon überschriebenen Wert zurück, statt hilf zu benutzen.
Ansatz: Testen Sie gedanklich mit z = {3, 1, 2}: Welche Zeile liefert zuerst etwas Unerwartetes?
Weiter: Gesucht sind drei Fehler: der Startwert von minPos, die Vergleichsbedingung und die letzte Zuweisung.
A6
Aufwand bei n = 16
AFB II Mix

Eine sortierte bzw. unsortierte Reihung hat \(n=16\) Elemente. Vergleichen Sie den Aufwand der Verfahren und verbinden Sie jedes mit der Anzahl der Vergleiche bzw. Durchläufe.

Ansatz: Die Minimumsuche ist eine lineare Suche ohne Abbruch: ein Vergleich pro weiteres Element.
Weiter: In Runde \(k\) sind noch \(n-k+1\) Elemente unsortiert, also \(n-k\) Vergleiche.
A7
Was hängt wovon ab?
AFB II

Der Aufwand von Selectionsort wird für Reihungen gleicher Länge \(n\), aber verschiedener Anordnung gemessen. Analysieren Sie für jede Größe (bezogen auf Struktogramm und Java-Methode der Inhaltsseite), wovon sie abhängt.

Klicken Sie die Felder an, die zutreffen. Ein zweiter Klick nimmt die Markierung zurück.
Größehängt nur von n abhängt auch von der Anordnung ab
Anzahl der Vergleiche
Anzahl der echten Vertauschungen (Element wechselt den Platz)
Anzahl der Durchläufe der äußeren Schleife
Wie oft minPos ← j ausgeführt wird
Wie oft hilf ← a[i] ausgeführt wird
Beide Schleifenköpfe hängen nur von \(n\) ab, deshalb auch die Vergleiche und die drei Tauschzeilen (sie stehen ohne Bedingung in der äußeren Schleife). Nur die Zuweisung minPos ← j steht im Ja-Zweig — und ob ein Element wirklich den Platz wechselt, hängt davon ab, wo das Minimum liegt.
Ansatz: Fragen Sie bei jeder Anweisung: Steht sie in einem Zweig, der nur manchmal ausgeführt wird?
Weiter: Die Tauschzeilen stehen im Struktogramm ohne Verzweigung am Ende jeder Runde.
A8
Doppelt so viele Daten
AFB III

Ein Messgerät sortiert 1000 Messwerte mit Selectionsort in 0,5 s. Die Laufzeit ist proportional zur Anzahl der Vergleiche. Schätzen Sie die Laufzeit für größere Datenmengen ab.

Rechnen Sie die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. Vergleiche für n = 1000
  2. Vergleiche für n = 2000
  3. Faktor, um den die Vergleiche wachsen (eine Nachkommastelle)
  4. erwartete Laufzeit für 2000 Werte in s
  5. erwartete Laufzeit für 10 000 Werte in s
\(\frac{2000\cdot1999}{2}:\frac{1000\cdot999}{2}\approx4{,}0\): doppelte Datenmenge, vierfache Laufzeit. Für 10 000 Werte ist der Faktor \(\frac{10000\cdot9999}{1000\cdot999}\approx100\), also etwa 50 s. Quadratischer Aufwand wird bei großen Datenmengen schnell unbrauchbar.
Ansatz: \(V(n)=\frac{n(n-1)}{2}\) einsetzen.
Weiter: Faktor mal 0,5 s. Für große \(n\) gilt \(V(n)\approx\frac{n^{2}}{2}\) — zehnfaches \(n\), hundertfacher Aufwand.
A9
Wer steht am Ende wo?
AFB III

Eine Quiz-App sortiert die Liste (Ida, 3) (Jan, 2) (Kim, 3) (Leo, 1) mit Selectionsort aufsteigend nach der Anzahl der Fehler (Vergleich mit < nur auf die Fehlerzahl). Bestimmen Sie die Reihenfolge nach dem Sortieren.

Ziehen Sie die Karten in die richtige Reihenfolge — mit der Tastatur: ↑/↓ verschiebt, Shift+↑/↓ wechselt nur den Fokus.
1Leo (1 Fehler)
2Jan (2 Fehler)
3Kim (3 Fehler)
4Ida (3 Fehler)
Runde 1 tauscht Leo mit Ida: Leo Jan Kim Ida. Runde 2 und 3 tauschen nichts, weil Ida (3) nicht kleiner als Kim (3) ist. Ida stand am Anfang vor Kim, jetzt dahinter — der weite Tausch in Runde 1 hat die Reihenfolge gleicher Werte verändert. Selectionsort ist nicht stabil.
Ansatz: Spielen Sie die Runden wirklich durch, statt nur nach Fehlern zu ordnen — bei Gleichstand entscheidet der Algorithmus.
Weiter: Runde 1: Minimum Leo an Index 3, Tausch mit Index 0 — wo landet Ida?
A10
Schon sortiert — schneller fertig?
AFB III Trick

Die Reihung {2, 5, 9, 14, 20, 27, 35, 44, 54, 65} ist bereits aufsteigend sortiert. Berechnen Sie, wie viele Vergleiche Selectionsort trotzdem durchführt.

Rechnen Sie selbst und tragen Sie das Ergebnis ein — Enter prüft direkt.
Selectionsort „merkt“ nicht, dass alles sortiert ist: Jede Minimumsuche vergleicht bis zum Ende. \(\frac{10\cdot9}{2}=45\) Vergleiche — und 0 echte Vertauschungen. Wer 9 oder 0 eingetragen hat, hat an einen Algorithmus mit Abbruch gedacht.
Ansatz: Hat die Anordnung Einfluss auf die Minimumsuche?
Weiter: Zählen Sie die Elemente, dann \(\frac{n(n-1)}{2}\).