BubbleSort
Auf digitalen Geräten (Smartphone, Computer, etc.) sucht man ständig etwas: Eine App, einen Song, ein Video. Auch auf Webseiten und innerhalb von Apps ist man ständig auf der Suche. Denken Sie nur mal daran, was Sie als erstes tun, nachdem Sie die Amazon-Webseite geöffnet haben.
So eine Suche kann aber nur dann schnell gehen, wenn die Daten, die man durchsucht, sortiert sind! Denken Sie nur an die Lottozahlen - wenn die Liste sortiert ist, finden Sie ihre Zahlen schneller.
Nicht nur Menschen, sondern auch Computer finden das Gesuchte in sortierten Daten wesentlich schneller. Wir werden uns deshalb anschauen, wie man man das hinkriegt: Wir sortieren Daten!
BubbleSort - Leicht zu verstehen!
In der Praxis verbringen viele Computer einen Großteil ihrer Zeit damit, Daten zu sortieren. Weil das Sortieren so wichtig ist, hat man viele verschieden Algorithmen (also klar definierte Vorgehensweisen) erfunden, um dieses Ziel zu erreichen. Wir schauen uns jetzt einen Sortier-Algorithmus an, der ziemlich leicht zu verstehen ist: Bubble Sort.
(Kleine Vorbemerkung zur Schreibung: BubbleSort und Bubble Sort, beides kommt vor, wobei man im Deutschen meistens Bubblesort schreibt.)
Der Größte-Zahl-ans-Ende-Algorithmus
- Wir fangen links an und vergleichen zwei benachbarte Elemente des Arrays.
- Wenn das linke Element größer ist als das rechte, dann "wandert es nach rechts", es wird also getauscht.
- Nachdem wir so alle benachbarten Elemente des Arrays verglichen haben, steht das größte Element am Ende des Arrays!
Beispiel: Ein Array mit 4 Zahlen
Wie oft muss verglichen werden?
Wir sehen, dass wir bei 4 Zahlen genau 3 Vergleiche benötigen. Daraus können wir diese Erkenntnis gewinnen:
Anzahl Vergleiche = Länge des Arrays - 1
Struktogramm: Größte-Zahl-ans-Ende-Algorithmus
Aufgabe zum »Größte Zahl ans Ende«-Algorithmus
(1) In Scratch die größte Zahl nach hinten bringen
Öffnen Sie das Projekt 7200-GroesstesElementAnsEnde-AUFGABE
Entwerfen Sie in Scratch den Programmcode, mit dem Sie das größte Element ans Ende des Arrays verschieben.
BubbleSort: Mehrere Durchgänge
Unser Ziel ist es, das komplette Array zu sortieren. Genau das kriegen wir hin, wenn wir den Größte-Zahl-ans-Ende-Algorithmus in mehreren Durchgängen auf das restliche Array anwenden. Schauen wir uns das im Beispiel an:
Damit haben wir es fast geschafft: Noch ein weiterer Durchgang mit dem Größte-Zahl-ans-Ende-Algorithmus:
Bubble Sort: Wie viele Durchgänge brauchen wir?
Sie sehen: Wenn wir unseren Größte-Zahl-ans-Ende-Algorithmus mehrmals anwenden, haben wir am Schluss ein komplett sortiertes Array!
Die Frage ist jetzt: Wie viele Durchgänge brauchen wir, bis das Array sortiert ist?
Fassen wir unsere Beobachtungen zusammen:
- Unser Array hatte 4 Elemente!
- Wir haben 3 Durchgänge gebraucht!
➡️ Vermutung: Die Anzahl der Durchgänge entspricht Länge des Arrays – 1
Kann das sein? In jedem Durchgang verschieben wir die jeweils größte Zahl ans Ende des übrig gebliebenen Arrays. Dann müssten es doch genauso viele Durchgänge sein, wie Elemente im Array vorhanden sind!
ABER:
Im letzten Durchgang (im Beispiel: Durchgang 3) werden gleich 2 Elemente richtig einsortiert!
➡️ Unsere Vermutung stimmt!
Wir müssen also das Folgende tun, um ein Array mit BubbleSort zu sortieren:
Der Teil, der wiederholt werden soll, muss also ebenfalls in eine Schleife verschoben werden:
Eine Schleife in einer Schleife! Das sieht ja jetzt echt kompliziert aus. Bevor wir uns genauer anschauen, wie das funktioniert, müssen wir erst noch einen kleinen "Schönheitsfehler" beseitigen, der uns bisher noch nicht aufgefallen ist!
Betrachten wir nochmal, welche Elemente wir in den einzelnen Durchgängen miteinander vergleichen:
Sie müssten sehen, dass die Schleife zum Vertauschen der Elemente jedes Mal kürzer läuft. Wir verändern unser Struktogramm entsprechend, um das zu berücksichtigen:
Aufgaben zum Sortieren mit BubbleSort
(2) Namensliste sortieren
Sie haben eine Namensliste, die sortiert werden soll: Eva Anja Dragan Jasmin Alex
Sortieren Sie diese Liste "von Hand", indem Sie den BubbleSort-Algorithmus verwenden. Verwenden Sie dafür diese Vorlage: 7200_Aufgabe2_NamenSortieren.docx
(Hinweis: Sie müssen nicht notieren, ob getauscht wird oder nicht!)
(3) Lottozahlen mit BubbleSort sortieren
Öffnen Sie das Projekt 7210_BubbleSort-AUFGABE
Ihre Aufgabe ist es, Lottozahlen zu sortieren. Setzen Sie dazu das BubbleSort-Struktogramm um!
(4) Verkaufsliste sortieren
Öffnen Sie das Projekt 7215_Blumenladen-AUFGABE
In diesem Projekt wurde bereits ein Array mit dem Namen verkaeufe
erstellt und gefüllt.
Ihre Aufgabe ist es, das Array verkaeufe
zu sortieren. Setzen Sie dazu den BubbleSort-Algorithmus ein!
Erklärvideo: BubbleSort
Erklärvideo: BubbleSort im Struktogramm und Wertetabellen
Arbeitsblatt: BubbleSort (mit Aufgaben)
Arbeitsblatt »BubbleSort« (PDF)
Übungsblatt »BubbleSort - Vorlage zur Übung Namen sortieren« (docx)
Übersicht: Unterrichtsverlauf Bubblesort
- Video bis Minute 11:45 anschauen
- Übung Lottozahlen: Größte-Zahl-ans-Ende-Algorithmus
Übungsblatt »Größte-Zahl-ans-Ende: Lottzahlen« (docx)
Übungsblatt »Größte-Zahl-ans-Ende: Lottzahlen« (pdf) - Lösung vergleichen (Video 11:45 bis 12:20)
- Umsetzung in Scratch am Projekt 7200-GroesstesElementAnsEnde-AUFGABE
(Lösung im Video ab 13:42 bis 17:40; die anschließende Java-Programmierung interessiert erst mal nicht. ) - "Bubblephase": Mehrere Durchgänge (Video ab 19:00 bis 27:00)
- Bubblephase in Scratch implementieren (7200_uebung_bubblephase)
- Übung gesamt: 7200_Aufgabe2_NamenSortieren.docx (und evtl. weitere Übungen, siehe unten auf dieser Seite)
Mögliche Aufgaben in Klassenarbeit:
- Sortierschritte eines Arrays ausführen (in Tabelle)
- Bubble-Sort-Algorithmus in eigenen Worten beschreiben
- Bubble-Sort-Algorithmus erkennen (z.B. gegebenes Struktogramm, gegebene Tabelle mit Sortierschritten)
- Fehlerhaften Bubble-Sort-Algorithmus (Struktogramm) berichtigen