Menu
Coddy logo textTech

Bubblesort

Zuletzt aktualisiert

Bubblesort durchläuft die Liste wiederholt, vergleicht jedes Paar benachbarter Elemente und vertauscht sie, wenn sie in der falschen Reihenfolge sind. Nach jedem vollständigen Durchlauf ist der größte verbleibende Wert an seine korrekte Position am Ende "aufgestiegen", sodass jeder Durchlauf ein Element weniger betrachtet. Drücke oben auf Abspielen, um die Vergleiche und Vertauschungen zu beobachten, oder gehe sie einzeln durch.

Es ist einer der am leichtesten verständlichen Sortieralgorithmen, was ihn zu einem großartigen ersten Algorithmus macht - aber seine Laufzeit von O(n²) macht ihn für große Eingaben unpraktikabel.

Zeit- und Speicherkomplexität

FallKomplexitätHinweise
Bester FallO(n)Bereits sortiert, mit einer Früh-Abbruch-Prüfung
DurchschnittsfallO(n²)Zufällige Reihenfolge
Schlechtester FallO(n²)Umgekehrt sortiert
SpeicherO(1)In-place, nur eine temporäre Variable
StabilJaGleiche Elemente behalten ihre relative Reihenfolge

Schritt für Schritt

SchrittWas passiert
1Beginne am Anfang des Arrays.
2Vergleiche das aktuelle Element mit dem nächsten.
3Wenn sie in falscher Reihenfolge sind, vertausche sie.
4Rücke eine Position nach rechts und wiederhole bis zum Ende (ein Durchlauf).
5Wiederhole die Durchläufe; jeder Durchlauf fixiert ein weiteres Element am Ende.
6Stoppe, wenn ein vollständiger Durchlauf keine Vertauschungen macht.

Durchgerechnetes Beispiel

Sortieren von [5, 2, 4, 1]:

DurchlaufArrayAktion
1[2, 4, 1, 5]Vertausche 5,2, dann 5,4, dann 5,1; die 5 steigt ans Ende auf.
2[2, 1, 4, 5]2,4 in Ordnung; vertausche 4,1; 4,5 in Ordnung; die 4 ist nun platziert.
3[1, 2, 4, 5]Vertausche 2,1; der Rest ist bereits in Ordnung; die 2 ist platziert.
4[1, 2, 4, 5]Ein vollständiger Durchlauf macht keine Vertauschungen, also ist das Array sortiert und der Algorithmus stoppt.

Wann man Bubblesort verwendet

Verwende es, wennVermeide es, wenn
Du lehrst oder lernst, wie vergleichsbasierte Sortierverfahren funktionierenDu große Eingaben sortierst, bei denen O(n²) viel zu langsam ist
Die Eingabe winzig oder fast sortiert ist (mit Früh-Abbruch nähert es sich O(n))Du das schnellste Allzweck-Sortierverfahren brauchst - verwende Quicksort oder Mergesort
Du ein stabiles, In-place-Sortierverfahren mit fast keinem Code willstDie Daten in zufälliger Reihenfolge vorliegen und die Leistung wichtig ist
Du in einem Durchlauf erkennst, ob eine kurze Liste bereits sortiert istViele Schreibvorgänge teuer sind (z. B. Flash-Speicher); Selectionsort macht weniger Vertauschungen

Bubble Sort-Code

Eine saubere, lauffähige Bubble Sort-Implementierung in Python, JavaScript, Java, C++, C. Wähle eine Sprache, kopiere den Code oder öffne ihn vorgeladen im Coddy-Playground.

Bubble Sort-Code in Python

Python
1def bubble_sort(a):2    n = len(a)3    for i in range(n - 1):4        swapped = False5        for j in range(n - 1 - i):6            if a[j] > a[j + 1]:7                a[j], a[j + 1] = a[j + 1], a[j]8                swapped = True9        if not swapped:10            break  # no swaps means the list is already sorted11    return a12
13
14nums = [5, 1, 4, 2, 8]15print("Before:", nums)16bubble_sort(nums)17print("After: ", nums)
Führe diesen Code im Python-Playground aus

Bubblesort-FAQ

Wie hoch ist die Zeitkomplexität von Bubblesort?
Bubblesort läuft aufgrund der verschachtelten Schleifen im Durchschnitts- und schlechtesten Fall in O(n²). Mit einer Früh-Abbruch-Optimierung kann es bei einem bereits sortierten Array O(n) erreichen. Es verwendet O(1) zusätzlichen Speicher.
Ist Bubblesort stabil?
Ja. Bubblesort vertauscht benachbarte Elemente nur, wenn sie strikt in falscher Reihenfolge sind, sodass gleiche Elemente einander nie überholen und ihre ursprüngliche relative Reihenfolge behalten.
Warum heißt es Bubblesort?
Bei jedem Durchlauf bewegt sich der größte unsortierte Wert Schritt für Schritt zum Ende des Arrays, so wie eine Blase an die Oberfläche steigt - daher "Bubble" (Blase) sort.
Was ist der Unterschied zwischen Bubblesort und Insertionsort?
Beide laufen in O(n²) und sind stabil und in-place, bewegen die Daten aber unterschiedlich: Bubblesort vertauscht wiederholt benachbarte fehlgeordnete Paare, während Insertionsort jedes Element nimmt und es an seine korrekte Stelle im sortierten Präfix schiebt. Insertionsort macht meist weniger Schreibvorgänge und ist in der Praxis schneller, besonders bei fast sortierten Daten.
Wann sollte ich Bubblesort statt Quicksort verwenden?
Fast nie für echte Arbeitslasten - die durchschnittliche O(n log n)-Zeit von Quicksort zermalmt Bubblesorts O(n²) bei allem außer winzigen Eingaben. Bubblesort lohnt sich nur, wenn die Liste sehr klein oder fast sortiert ist, oder wenn du das einfachstmögliche stabile Sortierverfahren zum Lehren möchtest.
Ändert die Früh-Abbruch-Optimierung den schlechtesten Fall von Bubblesort?
Nein. Zu verfolgen, ob ein Durchlauf eine Vertauschung gemacht hat, lässt Bubblesort früh stoppen und bei bereits sortierter Eingabe O(n) erreichen, aber ein umgekehrt sortiertes Array benötigt weiterhin jeden Vergleich, sodass der schlechteste Fall O(n²) bleibt. Die Optimierung hilft nur im besten und in fast sortierten Fällen.
Coddy programming languages illustration

Meistere Algorithmen mit Coddy

LOS GEHT'S