Java Bubblesort , der Algorithmus funktioniert nicht?

Bubblesort Java Code - (programmieren, Java, Bubblesort)

2 Antworten

Hi,

was du betreibst, ist kein Bubblesort. Bei Bubblesort "bubbelt" die erste Zahl des Arrays in einem Durchlauf bis an ihre Endposition, indem sie ggf. mit ihrem rechten Nachbarn den Platz tauscht. Dafür ist notwendig, dass du in der inneren for-Schleife dieselbe Variable nimmst, also nicht i, sondern j. Sonst wird die kleinste Zahl immer nach ganz vorne getauscht, wobei z.B. für i=0, j=3 die Zahl an der Position 2 "übersprungen" wird. Das geht zwar im Prinzip auch, aber es ist halt kein Bubblesort, wo die Zahl nach hinten "durchblubbert".

Die Variable i musst du nicht für die Positionsangabe nutzen, sondern für die Begrenzung des Arraybereichs, der noch sortiert werden soll. Also z.B. für die Obergrenze oder den Startwert in der inneren Schleife.

Hier siehst du ein Bsp: https://de.wikipedia.org/wiki/Bubblesort


Was genau tut dein Algorithmus denn? Wenn du Fehler in Suchalgorithmen suchst, ist es sinnvoll, einen Test-Befehl einzufügen, der nach jeder Aktion das Array ausgibt. So kannst du sehen, was dein Algorithmus treibt und wo der Fehler steckt.
Du fragst deinen Alg z.b. nach einem Feld, das es nicht gibt. Sagen wir, das Array hat Länge 3, also die Plätze 0,1 und 2. Dann ist bei der letzten Schleife i=2 und j=2. Du fragst aber was an Stelle j+1 im Array ist, also bei 2+1=3, was es nicht gibt. Du darfst hier nur bis <n-1 gehen.

P.S.: ich gehe aber davon aus, dass du die Methode schon auf einem Array aufrufst, gell?!


FitnHealthy 
Fragesteller
 11.09.2016, 12:59

Ja.. Das Prinzip mit dem vertauschen habe ich ja schon verstanden. Das sieht man ja auch das ich mein array[1] in einer temp Variable abgespeichert habe, damit ich diese mit meiner array[0] Variable überschreiben kann, falls array[0] < array[1], das habe ich schon verstanden. Ich habe nur nicht die Methode aufgerufen

0
FitnHealthy 
Fragesteller
 11.09.2016, 13:16

Ohhhhhhhhhhhhhh ,Ich habe es jetzt verstanden bin nochmal durchgegangen ... mein Algorithmus war ja falsch :D und meine Schleife auch Danke :p. War wohl gester Nachts zu spät fürs Programmieren

0
PWolff  11.09.2016, 13:25

Eigentlich ist der Ansatz schon ein Bubble Sort - richtig ausgeführt wandern die großen Elemente nach "oben" bzw "unten" (je nach Betrachtungsweise).

Aber die Grenzen der inneren Schleife sind falsch gewählt - es darf ja nicht in beide Richtungen verglichen und verschoben werden.

(Hier wird ja sowohl getauscht, wenn array[3] < array[4] als auch wenn array[4] < array[3]

Nachtrag: Man kann die Grenzen beibehalten, muss dann aber noch die Prüfung einbauen, ob i < j oder umgekehrt ist - z. B.:

if ((numbers[i] > numbers[j]) != (i > j))
1

Du rufst die Methode ja auch  nie auf.

FitnHealthy 
Fragesteller
 11.09.2016, 12:46

Ja stimmt ... :D danke ^_^

0