MINT lernen

Abituraufgaben: Bubblesort

Zwei Aufgaben auf Abiturniveau: Bubblesort von Hand ausführen, Aufwand herleiten und eine Variante beurteilen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Startliste im Schwimmverein

AFB I–II

Ein Schwimmverein speichert die 50-m-Zeiten (in Sekunden) von sechs Schwimmerinnen in der Reihung zeiten. Für die Startliste sollen die Zeiten aufsteigend sortiert werden; dazu wird die Grundversion von Bubblesort verwendet.

Reihung zeiten vor dem Sortieren
zeiten310241382223274355
  1. Beschreiben Sie das Vorgehen von Bubblesort in einem Durchlauf und nennen Sie, was nach dem k-ten Durchlauf über die Reihung feststeht.
  2. Stellen Sie die Belegung von zeiten nach jedem der fünf Durchläufe in einer Tabelle dar und notieren Sie jeweils die Anzahl der Vertauschungen.
  3. Leiten Sie eine Formel für die Anzahl der Vergleiche der Grundversion bei n Elementen her und geben Sie den Wert für diese Reihung an.
  4. Erläutern Sie am Ergebnis aus b), wie eine Variante mit einer booleschen Variable getauscht Arbeit einsparen kann, und geben Sie an, wie viele Vergleiche sie hier benötigt.

Hinweise

Hinweis zu Aufgabe a)
Achten Sie auf zwei Dinge: welches Paar jeweils verglichen wird und wohin das größte Element wandert.
Hinweis zu Aufgabe b)
Beginnen Sie jeden Durchlauf bei Index 0 und vergleichen Sie nur bis zur Grenze des unsortierten Teils. Der fünfte Durchlauf vergleicht nur noch ein Paar.
Hinweis zu Aufgabe c)
Durchlauf 1 vergleicht n − 1 Paare, jeder weitere eines weniger. Schreiben Sie die Summe einmal vorwärts und einmal rückwärts.
Hinweis zu Aufgabe d)
Suchen Sie in Ihrer Tabelle den ersten Durchlauf ohne Vertauschung.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

In einem Durchlauf werden von links nach rechts benachbarte Elemente zeiten[j] und zeiten[j+1] verglichen; ist das linke größer, werden beide über eine Hilfsvariable getauscht. Das größte Element des unsortierten Teils wird dadurch bis an dessen rechtes Ende mitgenommen. Nach dem k-ten Durchlauf stehen die k größten Werte in ihrer endgültigen Reihenfolge am rechten Ende; der unsortierte Teil umfasst noch die Indizes 0 bis n − 1 − k.

Erwartungshorizont zu Aufgabe b)
Durchlaufzeiten danachVertauschungen
124 31 22 27 35 384
224 22 27 31 35 382
322 24 27 31 35 381
422 24 27 31 35 380
522 24 27 31 35 380

Insgesamt 7 Vertauschungen.

Erwartungshorizont zu Aufgabe c)

\(V=(n-1)+(n-2)+\dots+1\). Die Summe zweimal (vorwärts und rückwärts) untereinander geschrieben ergibt \(n-1\) Spalten mit jeweils dem Wert \(n\): \(2V=n(n-1)\), also \(V=\frac{n(n-1)}{2}\). Für \(n=6\): \(V=\frac{6\cdot5}{2}=15\) Vergleiche (5 + 4 + 3 + 2 + 1).

Erwartungshorizont zu Aufgabe d)

Nach Durchlauf 3 ist die Reihung bereits sortiert; die Durchläufe 4 und 5 ändern nichts mehr. Die Variante setzt vor jedem Durchlauf getauscht auf falsch und bei jedem Tausch auf wahr. Gab es in einem Durchlauf keinen Tausch, ist die Reihung sortiert und die äußere Schleife endet. Erst Durchlauf 4 zeigt, dass nichts mehr getauscht wird — er muss also noch ausgeführt werden. Eingespart wird nur Durchlauf 5: \(5+4+3+2=14\) statt 15 Vergleiche.

2

Beliebte Podcast-Folgen

AFB II–III

Ein Podcast-Portal zeigt seine Folgen nach der Zahl der Abrufe geordnet an. Die Abrufzahlen (in Hundert) stehen in der Reihung abrufe. Das Entwicklungsteam verwendet dafür den folgenden Algorithmus.

Struktogramm des Algorithmus sortiere
  1. Analysieren Sie den Algorithmus: Geben Sie an, in welcher Reihenfolge er sortiert, und erklären Sie die Aufgabe der Variablen getauscht.
  2. Wenden Sie den Algorithmus auf abrufe = {42, 39, 26, 18, 51} an. Geben Sie die Belegung nach jedem Durchlauf der äußeren Schleife sowie die Gesamtzahl der Vergleiche an.
  3. Implementieren Sie den Algorithmus als Methode sortiere, die eine int-Reihung als Parameter erhält.
  4. Das Team behauptet: „Jeden Tag kommt nur eine neue Folge hinzu; sie wird am Ende der bereits sortierten Reihung angehängt. Die Reihung ist also fast sortiert, und dank getauscht ist unser Verfahren dann immer schnell.“ Beurteilen Sie diese Aussage.

Hinweise

Hinweis zu Aufgabe a)
Achten Sie auf das Vergleichszeichen in der Bedingung — und darauf, wann die äußere Schleife endet.
Hinweis zu Aufgabe b)
Ein Durchlauf von j = 0 bis j = 3 im ersten Durchlauf. Die 51 steht ganz hinten: Wie weit kommt sie pro Durchlauf?
Hinweis zu Aufgabe c)
Die Bedingung „und getauscht“ gehört in den Kopf der Schleife; in Java schreibt man sie mit &&.
Hinweis zu Aufgabe d)
Unterscheiden Sie zwei Fälle: Die neue Folge hat wenige Abrufe — oder sehr viele. Wie weit muss sie jeweils wandern?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Getauscht wird, wenn das linke Element kleiner ist als das rechte: Kleine Werte wandern nach rechts, der Algorithmus sortiert absteigend (Bubblesort). getauscht merkt sich, ob im aktuellen Durchlauf mindestens ein Tausch stattfand. Ist es nach einem Durchlauf noch falsch, ist die Reihung sortiert und die äußere Schleife endet vorzeitig. Mit dem Startwert wahr wird der erste Durchlauf sicher ausgeführt.

Erwartungshorizont zu Aufgabe b)
Durchlaufabrufe danachVergleicheTausch
142 39 26 51 1841
242 39 51 26 1831
342 51 39 26 1821
451 42 39 26 1811

Nach Durchlauf 4 ist i = 4 und die Schleife endet über die erste Bedingung. Insgesamt 4 + 3 + 2 + 1 = 10 Vergleiche — trotz der fast sortierten Eingabe nicht weniger als in der Grundversion.

Erwartungshorizont zu Aufgabe c)
public static void sortiere(int[] abrufe) {
    boolean getauscht = true;
    int i = 0;
    while (i < abrufe.length - 1 && getauscht) {
        getauscht = false;
        for (int j = 0; j < abrufe.length - 1 - i; j++) {
            if (abrufe[j] < abrufe[j + 1]) {
                int hilf = abrufe[j];
                abrufe[j] = abrufe[j + 1];
                abrufe[j + 1] = hilf;
                getauscht = true;
            }
        }
        i++;
    }
}

Gleichwertig ist eine for-Schleife mit der Bedingung i < abrufe.length - 1 && getauscht.

Erwartungshorizont zu Aufgabe d)

Die Aussage stimmt nur teilweise. Hat die neue Folge die wenigsten Abrufe, ist die Reihung schon sortiert: ein Durchlauf ohne Tausch, \(n-1\) Vergleiche — schnell. Hat sie dagegen die meisten Abrufe, muss sie von ganz hinten nach ganz vorn. Bubblesort bewegt sie pro Durchlauf aber nur um einen Platz nach vorn; jeder Durchlauf enthält einen Tausch, ein Abbruch findet nicht statt. Es werden alle \(n-1\) Durchläufe mit \(\frac{n(n-1)}{2}\) Vergleichen ausgeführt (wie in b). „Immer schnell“ ist also falsch: Im ungünstigen Fall wächst der Aufwand quadratisch mit n. Sinnvoller wäre, die neue Folge wie bei Insertionsort von hinten an ihren Platz einzufügen — höchstens \(n-1\) Vergleiche. Vollständig ist die Antwort, wenn beide Fälle unterschieden und der ungünstige Fall mit der Bewegung „ein Platz pro Durchlauf“ begründet wird.