Bubble Sort Algorithmus?
Hallo, es geht um die 2 for-Schleifen des Bubble-Sort-Algos:
for (i = 0; i < array.length - 1; i++) {
for (j = 0; j < array.length - i - 1; j++) {
Ich verstehe nicht so wirklich was die beiden Schleifen genau machen. Vor allem verstehe ich nicht was es mit der - 1 und dem (- i - 1) auf sich hat. Ich weiß dass Arrays mit array[0] starten, ich dachte das wird bereits mit dem einfach < berücksichtigt, statt <=. Also ich kann mir das nicht so recht erklären (evtl -1, weil das größte Element nach dem Sortieren in der Schleife bereits an seiner Stelle steht und nicht mehr beachtet wird vom Algorithmus). Ich würde mich freuen, wenn mir jemand das irgendwie erklären kann. Ich fühl mich so blöd -_-
1 Antwort
Die Animation veranschaulicht das ganz gut: https://de.wikipedia.org/wiki/Bubblesort#Prinzip
Beim Algo wird immer ein benachpartes Paar verglichen. Wenn das Array die Länge array.length hat, dann gibt es genau array.length - 1 solcher Paare:
(erstes, zweites), (zweites, drittes), ... , (vorletztes, letztes)
Es gibt dann kein Paar mehr, dass mit dem letzten Element beginnt.
Das größte Element wandert immer nach rechts, sodass man nach dem Vergleich und ggf. Tausch von vorletztem und letztem Element weiß man, dass ganz rechts das größte Element ist. Anschließend muss man nur das erste bis zum vorletzten Element vergleichen und bestimmen, welches davon das größte ist. Das ganze wird wiederholt bis man in einer Schleife nur noch das erste und zweite Element vergleicht.
Insgesamt hat man bei den zu vergleichenden Paaren ein Dreiecksmuster:
1. Iteration: (1, 2), (2, 3), ... (n-2, n-1), (n-1, n)
2. Iteration: (1, 2), (2, 3), ... (n-2, n-1)
...
(n-1).te Iteration: (1, 2)