Nachbarvergleiche in der richtigen Reihenfolge durchführen
Das fertige Suffix bestimmen
Einen sicheren Frühabbruch erklären
Vergleich, Tausch und Durchlauf auseinanderhalten
Verständlich erklärt
Unsere aufsteigende Variante prüft von links nach rechts a[j] und a[j+1]. Genau wenn a[j] > a[j+1] gilt, tauschen sie ihre Plätze. Der nächste Vergleich verwendet bereits die geänderte Liste. Nach dem ersten vollständigen Durchlauf über j = 0 bis n−2 steht ein größtes Element am rechten Ende. In der nächsten Runde endet der Vergleich eine Position früher; das fertige Suffix wird nicht mehr verändert.
Ein vor jeder Runde auf False gesetztes Tauschflag wird bei einem tatsächlichen Tausch True. Bleibt es nach dem ganzen Durchlauf False, ist der aktive Bereich geordnet und das Verfahren kann enden. Kein Tausch bei nur einem einzelnen Paar reicht dafür nicht.
Die Variante mit strengem > tauscht gleiche Schlüssel nicht gegeneinander und ist stabil: Datensätze mit gleichem Schlüssel behalten ihre relative Reihenfolge. Eine schon sortierte Liste benötigt mit Frühabbruch einen prüfenden Durchlauf, sofern sie mindestens zwei Elemente hat, aber keinen Tausch. Leere und einelementige Listen sind bereits sortiert. Zähle Wertvergleiche und tatsächliche Vertauschungen getrennt: Ein Vergleich kann ohne Tausch enden.
Bubblesort
Nachbarpaar
Suffix
Tauschflag
Frühabbruch
Stabilität
Beispiel
Start: [3, 1, 4, 2]
Vergleich Index 0/1: [1, 3, 4, 2] (Tausch)
Vergleich Index 1/2: [1, 3, 4, 2] (kein Tausch)
Vergleich Index 2/3: [1, 3, 2, 4] (Tausch)
Nun ist Index 3 fertig.
Nächste Runde nur über Paare 0/1 und 1/2:
[1, 2, 3, 4]
Typische Fehler
Nach einem Tausch mit den alten Werten weiterrechnen
Das Maximum bei dieser Laufrichtung links erwarten
Beim ersten nicht getauschten Paar abbrechen
Vergleiche automatisch als Tausche zählen
Kurz zusammengefasst
Benachbarte Tausche transportieren das Maximum nach rechts. Ein schrumpfender aktiver Bereich und ein rundenweises Tauschflag vermeiden unnötige Arbeit.
Abi-Bezug
Kennzeichne nach jedem Vergleich die beiden Positionen und nach jeder Runde das fertige Suffix. Gib die Laufrichtung ausdrücklich an.
Jetzt selbst ausprobieren
Prüfe deine Lösung automatisch. Bei Bedarf helfen dir ein Tipp und anschließend die Musterlösung.
BPE 7J21 Punkteleicht
Bubblesort: eine vollständige Runde
Noch nicht begonnen
Aufgabenstellung
Start: [5, 1, 4, 2]. Prüfe die Paare 0/1, 1/2, 2/3 in dieser Reihenfolge. Tausche genau dann, wenn der linke Wert größer ist. Gib den Zustand nach der ganzen Runde kommagetrennt an; eckige Klammern sind optional.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Der zweite Vergleich benutzt die Werte nach dem ersten Tausch.
Verfolge die 5: Sie ist jeweils der linke Wert des nächsten betrachteten Paars.
Lösung anzeigen
Die Zustände sind [1, 5, 4, 2], [1, 4, 5, 2], [1, 4, 2, 5]. Die 5 wandert bei dieser Laufrichtung bis ans rechte Ende.
BPE 7J21 Punkteleicht
Ein Zwischenstand, noch kein Rundenende
Noch nicht begonnen
Aufgabenstellung
Bubblesort startet mit [4, 3, 2, 1], läuft von links nach rechts und tauscht bei streng größerem linken Wert. Welcher Zustand liegt nach genau zwei Nachbarvergleichen vor? Antworte kommagetrennt; eckige Klammern sind optional.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Zwei Vergleiche sind nicht automatisch zwei vollständige Runden.
Bearbeite hier nur 0/1 und 1/2; Index 3 bleibt noch unverändert.
Lösung anzeigen
Nach dem Paar 0/1 steht [3, 4, 2, 1], nach dem Paar 1/2 [3, 2, 4, 1]. Das Paar 2/3 wurde noch nicht geprüft.
BPE 7J22 Punktemittel
Eine geordnete Runde erkennen
Noch nicht begonnen
Aufgabenstellung
Eine Bubblesort-Runde prüft [1, 2, 3] von links nach rechts mit der Tauschbedingung a[j] > a[j+1]. Das Flag getauscht beginnt bei False und wird nur beim Tausch True. Welchen Wahrheitswert hat es nach der ganzen Runde? Antworte mit True oder False.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Ein Vergleich kann ohne Tausch enden.
Beide Nachbarpaare sind bereits geordnet, daher setzt kein Schritt das Flag auf True.
Lösung anzeigen
Weder 1 > 2 noch 2 > 3 trifft zu. Das Flag bleibt False; erst nach dem gesamten Durchlauf ist der Frühabbruch begründet.
BPE 7J22 Punktemittel
Genau einen Bubble-Durchlauf ausführen
Noch nicht begonnen
Aufgabenstellung
bubble_runde(a) gibt eine neue Liste nach genau einem vollständigen Links-nach-rechts-Durchlauf zurück: Prüfe die Nachbarpaare von 0/1 bis (n-2)/(n-1), tausche nur bei >. Nicht vollständig weitersortieren! Leere und einelementige Listen unverändert als neue Liste zurückgeben; Eingabe nicht ändern.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Weil du auf j+1 zugreifst, darf j höchstens len(ergebnis)−2 sein.
Eine Schleife reicht für eine Runde; eine zweite äußere Schleife würde hier zu viel sortieren.
Lösung anzeigen
def bubble_runde(a):
ergebnis = a.copy()
for j in range(len(ergebnis) - 1):
if ergebnis[j] > ergebnis[j + 1]:
ergebnis[j], ergebnis[j + 1] = ergebnis[j + 1], ergebnis[j]
return ergebnis
BPE 7J22 Punktemittel
Bubblesort mit sicherem Frühabbruch
Noch nicht begonnen
Aufgabenstellung
bubble_sort(a) liefert eine neue aufsteigend sortierte Liste. Implementiere Links-nach-rechts-Bubblesort mit schrumpfendem rechten Rand und einem Tauschflag pro Runde. Brich nur nach einer vollständigen Runde ohne Tausch ab. Die Eingabe bleibt unverändert. Verhaltenstests prüfen Randfälle; die Verfahrenswahl begründest du anhand des Codes.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Setze getauscht zu Beginn jeder äußeren Runde auf False und nur bei wirklichem Tausch auf True.
Die Abbruchprüfung steht hinter der inneren Schleife. Sonst würde etwa [1, 4, 3, 2] zu früh enden.
Lösung anzeigen
def bubble_sort(a):
ergebnis = a.copy()
for ende in range(len(ergebnis) - 1, 0, -1):
getauscht = False
for j in range(ende):
if ergebnis[j] > ergebnis[j + 1]:
ergebnis[j], ergebnis[j + 1] = ergebnis[j + 1], ergebnis[j]
getauscht = True
if not getauscht:
break
return ergebnis
BPE 7J22 Punktemittel
Tatsächliche Bubble-Tausche zählen
Noch nicht begonnen
Aufgabenstellung
bubble_tauschzahl(a) sortiert intern eine Kopie mit Links-nach-rechts-Bubblesort und strengem >. Liefere nur die Gesamtzahl der tatsächlichen Nachbartausche bis zur vollständigen Sortierung zurück, nicht die Vergleiche. Gleiche Nachbarn werden nicht getauscht; Eingabe unverändert lassen.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Erhöhe den Zähler innerhalb der Tauschbedingung, nicht bei jedem Schleifenschritt.
Eine bereits sortierte Liste hat 0 Tausche, obwohl Nachbarvergleiche stattfinden können.
Lösung anzeigen
def bubble_tauschzahl(a):
arbeit = a.copy()
anzahl = 0
for ende in range(len(arbeit) - 1, 0, -1):
for j in range(ende):
if arbeit[j] > arbeit[j + 1]:
arbeit[j], arbeit[j + 1] = arbeit[j + 1], arbeit[j]
anzahl += 1
return anzahl
BPE 7J23 Punkteanspruchsvoll
Wann darf Bubble wirklich enden?
Noch nicht begonnen
Aufgabenstellung
Der aktive Bereich eines Bubblesort-Durchlaufs läuft von links nach rechts; rechts davon liegt bereits ein fertiges Suffix. Wann begründet das Tauschflag den Abbruch?
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Ein Tauschflag sammelt Informationen über eine ganze Runde.
Bei [1, 4, 3] ist das erste Paar geordnet, das zweite aber nicht.
Lösung anzeigen
Erst der vollständige tauschfreie Durchlauf bestätigt, dass alle Nachbarpaare des aktiven Bereichs geordnet sind. Ein einzelnes korrektes Paar sagt nichts über spätere Paare.
BPE 7J23 Punkteanspruchsvoll
Stabilität und fertiges Suffix
Noch nicht begonnen
Aufgabenstellung
Datensätze werden nur nach ihrem Zahlenwert verglichen; Buchstaben markieren ihre ursprüngliche Reihenfolge. Bubblesort läuft links nach rechts und tauscht nur bei strengem >. Welche Aussagen gelten? Wähle alle richtigen Antworten.
Ausgabe bzw. Vorschau
Noch nicht ausgeführt.
2 Tipps anzeigen
Gleiche markierte Datensätze könnten ihre Reihenfolge nur ändern, wenn sie aneinander vorbeitauschen.
Prüfe die Behauptung zum Minimum mit [3, 2, 1]: Nach einer Runde steht [2, 1, 3].
Lösung anzeigen
Strenges > lässt gleiche Schlüssel in ihrer Reihenfolge. Durch die Links-nach-rechts-Vergleiche wandert ein größter Wert ans Ende; das Minimum muss dagegen mehrere Runden nach links wandern.