Direkt zum Inhalt

BPE 7 · J2

Bubblesort: benachbarte Werte vergleichen

Du vergleichst Nachbarn von links nach rechts und beobachtest, wie das größte verbleibende Element ans Ende wandert.

Bildungsplanbezug: BPE 7.2 · interne Lerneinheit 7.2.2

Geschätzte Lernzeit: 60 Minuten

Noch nicht begonnen

Das kannst du danach

  • 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
  1. Der zweite Vergleich benutzt die Werte nach dem ersten Tausch.
  2. 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
  1. Zwei Vergleiche sind nicht automatisch zwei vollständige Runden.
  2. 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
  1. Ein Vergleich kann ohne Tausch enden.
  2. 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
  1. Weil du auf j+1 zugreifst, darf j höchstens len(ergebnis)−2 sein.
  2. 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
  1. Setze getauscht zu Beginn jeder äußeren Runde auf False und nur bei wirklichem Tausch auf True.
  2. 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
  1. Erhöhe den Zähler innerhalb der Tauschbedingung, nicht bei jedem Schleifenschritt.
  2. 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
  1. Ein Tauschflag sammelt Informationen über eine ganze Runde.
  2. 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
  1. Gleiche markierte Datensätze könnten ihre Reihenfolge nur ändern, wenn sie aneinander vorbeitauschen.
  2. 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.

Lektionsabschluss

Bearbeite Aufgaben, um deine Auswertung zu sehen.