Bubble Sort, erklärung für den Code?

2 Antworten

Also du hast ein Feld von unsortierten Zahlen der Größe n, und eine Laufvariable i, welche sich mit jedem Durchlauf der for-Schleife um 1 erhöht. Die for-Schleife wird allerdings nur unter der Bedingung ausgeführt, dass das Feld nicht leer sein darf, sonst hätte man ja keine Zahlen zum Sortieren :D
Jedenfalls vergleicht die for-Schleife nun jede Zahl von n mit der nächsthöheren Zahl.
Ist die auf n folgende Zahl nun kleiner als das n, so wird das n mit der verglichenen Zahl getauscht, man will ja erreichen dass die Zahlen aufsteigend sortiert sind.
Ist die verglichene Zahl größer als das n, so wird die Laufvariable um 1 erhöht und die nächste Zahl wird verglichen.
Der Bubblesort-Algorithmus fängt also vorne am Zahlenfeld an und arbeitet sich quasi einmal komplett bis nach hinten durch, dabei ist zu beachten, dass wenn einmal eine Zahl getauscht wurde, der Algorithmus noch einmal durchgeführt werden muss, damit auch wirklich sicher gestellt ist, dass alles richtig sortiert ist.

Ich kann dir diese Seite hier empfehlen:
http://sorting.at/
Dort werden verschiedene Sortieralgorithmen visualisiert, unter anderem auch der Bubblesort. Ich hoffe ich konnte dir weiterhelfen :D


AbouRajas 
Beitragsersteller
 14.06.2018, 19:59

Ja konntest mir sehr weiterhelfen! Danke dir.. Ich hatte Verständnisprobleme mit dem "i", aber jz check ich es, Danke

1
AbouRajas 
Beitragsersteller
 14.06.2018, 20:04

Und eine frage noch: bei der for Schleife ist das "i" kleiner als n-2; i++.
Was bedeutet das genau?

0
TableRaw  14.06.2018, 20:19
@AbouRajas

Du brauchst ja immer 2 Elemente, die du vergleichst, sonst bringt das ja nichts. Nach jeden Schleifendurchlauf verringert sich ja dein n um eins, weil der hintere Teil des Feldes ja sortiert ist wenn du die Sortierschleife einmal durchlaufen lässt. Du musst die Schleife so oft anwenden, bis das n nur noch aus 2 Elementen besteht, diese vergleichst du dann, das ist dann quasi der letzte Durchgang der Schleife, denn wenn sich das n dann um 1 verringert gilt die Schleifenbedingung mit n>1 ja nicht mehr, du bist dann also fertig.
Deswegen muss die Laufvariable kleiner oder gleich dem Feld n minus 2 Elementen sein.

1

Wenn du schon bei diesem Code probleme hast: Lern bitte die Grundlagen von Java, bevor du dich an Algorithmen setzt

Du iterierst über das unsortierte Array und vertauscht immer ein Feld mit dem nächsten, wenn es größer ist. Dadurch werden die größten Elemente nach hinten geschoben.

In der nächsten Iteration sparst du dir das letzte Feld, da dort eh schon das Größte Element gespeichert ist usw.

Dies wiederholst du so oft, bis du nur noch zwei Felder checken musst.


AbouRajas 
Beitragsersteller
 14.06.2018, 20:01

Hättest du vielleicht eine gute Quelle wo man die Grundlagen lernen könnte? Hab im Internet geguckt, leider alles Schrott und unverständlich..

0