Wie programmiere ich den Bubblesort in Java (Processing)?
Zurzeit nehmen wir das Thema "Sortieralgorithmen" in der Schule durch und wir sollten als Project den Bubblesort in Processing programmieren. Dafür haben wir von unserer Lehrerin eine Vorlage bekommen, aber ich verstehe kaum etwas. Großteil der Elemente im Code haben wir im Unterricht noch nicht durchgenommen, wodurch für mich noch sehr viele Fragen in der Luft stehen. Als Zusammenfassung was wir schon im Unterricht gemacht haben: Methoden zum Zeichnen, Syntax einer Zahlenschleife, Deklarieren und Initialisieren, Setup, Verschiedene Arten von Methoden (mit Rückgabewert/Übergabenparameter oder ohne Rückgabewert) und Arrays. Dazu noch habe ich die Hilfe if (a>b){ und das Drucken vom Text in ein definiertes Fenster. Ich hab bei den ersten zwei Anweisungen schon etwas reingeschrieben, aber ich bin mir unsicher, ob ich es richtig mache oder in die komplett falsche Richtung gehe. Über eine Lösung oder weitere Hilfestellung würde ich mich deswegen sehr freuen.
1 Antwort
(...) aber ich verstehe kaum etwas.
Entweder du formulierst konkrete Fragen dazu, oder du musst selbst recherchieren. Processing hat eine Referenz, in der du zu jedem Schlüsselwort auch einen erklärenden Artikel findest.
Geh zeilenweise durch die bestehenden Zeilen und statte sie mit Kommentaren aus oder schreibe parallel stichpunktartig auf, was du deuten kannst. Es ist im Grunde so, wie bei einem Text in Fremdsprache, den du übersetzen möchtest. Teile auf, übersetze und füge es dann wieder zusammen, um dir ein Gesamtbild verschaffen zu können.
(...) aber ich bin mir unsicher, ob ich es richtig mache oder in die komplett falsche Richtung gehe. (...)
Finde erst einmal eine Lösung völlig fernab vom Code. Im ersten Schritt musst du erst einmal erfassen, wie der Bubblesort überhaupt funktioniert, danach kannst du die Teilschritte ermitteln.
Zu Ersterem: Beim Bubblesort geht es darum, das stets größte Element aus einer Menge zu finden und an deren Ende zu sortieren. Dafür geht man über alle Elemente der Menge und greift sich immer zwei aufeinanderfolgende Elemente heraus, die miteinander verglichen werden. Wenn das erste Element größer ist als das zweite Element, werden ihre Positionen vertauscht. So sollte spätestens nach einem kompletten Durchlauf durch die Menge das größte Element am Ende stehen. Es kann als korrekt sortiert betrachtet werden.
Diesen Sortiervorgang kann man nun wiederholen, allerdings betrachtet man nur noch die unsortierten Elemente. Nach mehreren Sortiervorgängen wird es irgendwann nur noch ein unsortiertes Element geben. Da sich dessen Position nicht mehr ändert, ist das Programm an diesem Zeitpunkt fertig.
Das einmal an einem konkreten Beispiel demonstriert:
Durchlauf 1 mit der zu sortierenden Menge: [ 3, 2, 5, 1 ]
3 > 2 => Tausch
[ 2, 3, 5, 1 ]
3 < 5 => kein Tausch
[ 2, 3, 5, 1 ]
5 > 1 => Tausch
[ 2, 3, 1, 5 ]
Durchlauf 2 mit der zu sortierenden Menge [ 2, 3, 1 ] (die 5 wird von nun an ignoriert)
2 < 3 => kein Tausch
[ 2, 3, 1 ]
3 > 1 => Tausch
[ 2, 1, 3 ]
Durchlauf 3 mit der zu sortierenden Menge [ 2, 1 ] (3 und 5 werden von nun an ignoriert)
[ 2, 1 ]
2 > 1 => Tausch
[ 1, 2 ]
Durchlauf 4 mit der zu sortierenden Menge [ 1 ] (2, 3 und 5 werden von nun an ignoriert)
Da es nur noch ein Element gibt, kann man schlussfolgern, dass die Liste nun sortiert sein muss.
Zu Zweiterem: Versuche den Ablauf erst einmal mit einem Struktogramm oder einen Programmablaufplan nachzubilden. Verwende nur einfachste Bausteine (Variablen erstellen/lesen, Abfragen, Wiederholungen). Was komplexer ist, muss aufgebrochen werden. Für das Tauschen zweier Elemente beispielsweise eignet sich ein eigener Plan. Deine Lehrerin hat dir offensichtlich in der Vorlage auch bereits angedeutet, dass du diesen Prozess separat (als Funktion) lösen sollst.
Erst wenn du einen Algorithmus mit einfachen Teilschritten geformt hast und ihn an einem beliebigen Beispiel (einer beliebigen Liste an Zahlen) erfoglreich testen konntest, folgt der Teil, bei dem du die Teilschritte in konkreten Quellcode übersetzt. Das sollte nur noch Fleißarbeit sein. Mehr als die Themen, die ihr im Unterricht bereits behandelt habt, brauchst du nicht.