Informatik · Klasse 7–13 · aktualisiert
Bubblesort: Algorithmus, Beispiel und Laufzeit
Du sortierst Zahlen mit Bubblesort, begründest, warum rechts immer ein Element fertig ist, und ordnest die Laufzeit ein.
0 von 11 Aufgaben gelöst
Kurz gesagt
Bubblesort vergleicht von links nach rechts zwei Nachbarn und tauscht sie, wenn die linke Zahl größer ist. Nach jeder Runde steht rechts das größte Element des noch unsortierten Rests. Im schlimmsten und im durchschnittlichen Fall wächst die Laufzeit quadratisch.
Stell dir vor, du sollst Karten mit Zahlen sortieren, darfst aber immer nur zwei nebeneinander vergleichen. Genau so arbeitet Bubblesort. Das Verfahren gilt als einfach zu erklären, deshalb lernt man es früh. An ihm siehst du auch gut, wie man die Laufzeit eines Algorithmus einschätzt.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
3 Abschnitte
Bubblesort ist ein Verfahren, das eine Liste sortiert, indem es Elemente miteinander vergleicht. Du gehst die Liste in einem Durchlauf von links nach rechts durch. In jedem Schritt vergleichst du die aktuelle Zahl mit ihrem rechten Nachbarn. Beim aufsteigenden Sortieren tauschst du die beiden, wenn die linke Zahl größer ist als die rechte. Sonst bleibt alles, wie es ist.
Danach beginnst du wieder links und machst den nächsten Durchlauf. Das wiederholst du, bis die Liste sortiert ist. Wenn du die Vergleiche dokumentieren sollst, schreibst du für jeden Schritt das verglichene Paar auf, ob du getauscht hast und wie die Liste danach aussieht. Bubblesort heißt auch „Sortieren durch Aufsteigen“ oder „Austauschsortieren“. In der Praxis wird es kaum eingesetzt, in der Lehre spielt es aber eine Rolle, weil es als einfach zu erklären und zu demonstrieren gilt.
Definition
Durchlauf
Ein Durchlauf (auch Runde) ist ein Gang von links nach rechts durch die Liste. Dabei wird jede Zahl mit ihrem rechten Nachbarn verglichen und bei Bedarf getauscht.
Beispiel: Die Zahlen 55, 07, 78, 12, 42 aufsteigend sortieren
- 1Durchlauf 1: (55, 07) tauschen → 07 55 78 12 42
- 2(55, 78) kein Tausch
- 3(78, 12) tauschen → 07 55 12 78 42
- 4(78, 42) tauschen → 07 55 12 42 78
- 5Durchlauf 2: (07, 55) kein Tausch; (55, 12) tauschen → 07 12 55 42 78; (55, 42) tauschen → 07 12 42 55 78
- 6Durchlauf 3: (07, 12) und (12, 42) kein Tausch, die Folge bleibt 07 12 42 55 78
- 7Durchlauf 4: (07, 12) kein Tausch. Fertig sortiert.
Teste dich
Nach dem ersten Durchgang ist die größte Zahl immer am Ende. Der Grund: Bei jedem Tausch wandert die größere der beiden Zahlen nach rechts. Hat der Durchlauf die größte Zahl der Liste erreicht, ist sie größer als jeder Nachbar. Sie wird also bei jedem weiteren Schritt nach rechts getauscht, bis sie ganz hinten liegt. Die größeren Elemente steigen so wie Blasen im Wasser nach oben, also ans Ende der Liste. Daher kommt der Name.
Im zweiten Durchlauf passiert dasselbe mit dem Rest. Nach jedem Durchlauf steht an der rechtesten Position das größte Element des jeweils noch unsortierten Rests. Dieses Element ist größer als alles, was links von ihm bleibt, und kleiner als alles, was schon rechts von ihm fertig steht. Mit jeder Runde kommt rechts also ein weiteres Element dazu, das richtig steht. Deshalb muss das letzte Element des vorherigen Durchlaufs nicht mehr betrachtet werden: Der übrige Teil enthält keine größeren Elemente mehr. Im Beispiel von eben musst du im zweiten Durchlauf die 78 nicht mehr vergleichen.
Kleine Elemente am Ende wandern dagegen nur langsam nach vorn, große Elemente am Anfang werden schnell nach hinten getauscht.
Merke: Nach jedem Durchlauf steht rechts das größte Element des noch unsortierten Rests an seinem endgültigen Platz. Der unsortierte Teil wird mit jeder Runde um ein Element kürzer.
| Nach Durchlauf | Rechts fertig | Liste |
|---|---|---|
| 1 | 78 | 07 55 12 42 78 |
| 2 | 55 und 78 | 07 12 42 55 78 |
| 3 | 42, 55 und 78 | 07 12 42 55 78 |
Teste dich
Es gibt zwei Varianten. Die einfache Variante hat eine feste Zahl von Durchläufen: Bei einer Liste mit n Elementen zählt die äußere Schleife von n bis 2 herunter. Das sind n − 1 Durchläufe, egal ob getauscht wird. Sie nutzt nicht aus, dass in den restlichen Durchläufen nichts mehr getauscht wird, wenn ein Durchlauf ohne Tausch blieb.
Die Variante mit Abbruch merkt sich mit einer Markierung namens „swapped“, ob in einem Durchlauf getauscht wurde. Wurde nicht getauscht, hört sie auf. Beim Beispiel 55, 07, 78, 12, 42 ändert der 3. Durchlauf nichts mehr. Die Variante mit Abbruch hört danach auf, die einfache Variante macht noch den 4. Durchlauf.
Laufzeit bedeutet zunächst die Zeitdauer, die ein Programm braucht. Sekunden hängen aber von Hardware, Betriebssystem und Taktrate ab. Deshalb schätzt man bei Algorithmen nach oben ab, wie viele einfache Operationen (Elementarschritte) nötig sind, abhängig von der Größe n der Eingabe. Dafür schreibt man O(…) in der sogenannten Landau-Notation.
Die einfache Variante vergleicht im ersten Durchlauf n − 1 Paare, dann n − 2 und so weiter bis 1. Zusammen sind das n·(n − 1)/2 Vergleiche, auch bei einer schon sortierten Liste. Bei fünf Zahlen sind es 4 + 3 + 2 + 1 = 10. Bubblesort hat die Laufzeit O(n²). Im schlimmsten Fall und im durchschnittlichen Fall wächst sie quadratisch. Im schlimmsten Fall (umgekehrt sortierte Liste) werden höchstens n·(n − 1)/2 Vertauschungen ausgeführt.
Bei einer schon sortierten Liste geht die Variante mit Abbruch die Liste nur einmal durch und braucht O(n) Schritte. Bei O(n) verdoppelt sich die Ausführungsdauer, wenn doppelt so viele Zahlen eingegeben werden. Sind die Elemente schon nah an ihren Zielpositionen, ist die Laufzeit erheblich besser als O(n²). Für kleine Eingaben kann Bubblesort in Frage kommen. Sonst wird es kaum eingesetzt, weil andere Verfahren ein besseres Laufzeitverhalten haben.
Definition
Quadratisches Wachstum
O(n²) bedeutet quadratisches Wachstum. Bei doppelter Größe der Eingabe wird die Ausführungsdauer etwa vervierfacht.
| Merkmal | Einfache Variante | Variante mit Abbruch |
|---|---|---|
| Sortierte Liste | alle n − 1 Durchläufe, n·(n − 1)/2 Vergleiche | nur ein Durchlauf, O(n) Schritte |
| Beispiel mit fünf Zahlen | 4 Durchläufe, 10 Vergleiche | hört nach dem 3. Durchlauf auf |
| Abbruch | bricht nie vorzeitig ab | hört auf, wenn ein Durchlauf ohne Tausch blieb |
Merke: Bei einer schon sortierten Liste spart die Variante mit Abbruch fast alle Durchläufe. Im schlimmsten Fall bleibt Bubblesort trotzdem quadratisch.
Teste dich
Alles auf einen Blick
Bubblesort
Schritt
Du vergleichst das aktuelle Element mit seinem rechten Nachbarn und tauschst, wenn die linke Zahl größer ist.
Runde
Nach jedem Durchlauf steht rechts das größte Element des jeweils noch unsortierten Rests.
Einfache Variante
Sie macht n − 1 Durchläufe, auch bei einer schon sortierten Liste.
Mit Abbruch
Sie hört auf, wenn ein Durchlauf ohne Tausch blieb.
Laufzeit
Im schlimmsten und im durchschnittlichen Fall wächst sie quadratisch, bei doppelter Eingabe etwa vierfach.
Einsatz
In der Praxis kaum eingesetzt, in der Lehre wegen der einfachen Erklärung wichtig.
Musteraufgabe · Schritt für Schritt
Vier Zahlen sortieren und die Vergleiche zählen
- 1Erfundenes Beispiel: Die Zahlen 4, 2, 5, 1 sollen aufsteigend sortiert werden (einfache Variante).
- 2Durchlauf 1: (4, 2) tauschen → 2 4 5 1; (4, 5) kein Tausch; (5, 1) tauschen → 2 4 1 5
- 3Die 5 steht jetzt ganz rechts und wird nicht mehr verglichen.
- 4Durchlauf 2: (2, 4) kein Tausch; (4, 1) tauschen → 2 1 4 5
- 5Durchlauf 3: (2, 1) tauschen → 1 2 4 5
- 6Vergleiche: 3 + 2 + 1 = 6, das passt zu n·(n − 1)/2 mit n = 4
- 7Probe: 1 2 4 5 ist aufsteigend und es sind noch alle vier Zahlen da.
Fehler finden
Prüfe die Schritte beim Sortieren von 8, 3, 6, 2 In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 3Nach einem Durchlauf steht nur die größte Zahl sicher rechts, der Rest 3 6 2 ist noch unsortiert. Richtig: Die Liste wird so lange durchlaufen, bis sie vollständig sortiert ist, hier 2 3 6 8.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Du gehst die Liste von links nach rechts durch und vergleichst jedes Element mit seinem Nachbarn. Nach dem ersten Durchlauf steht bei aufsteigendem Sortieren die Zahl am Ende. Bei quadratischem Wachstum wird die Ausführungsdauer bei doppelt so vielen Zahlen etwa .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback