Sortieralgorithmus funktioniert nicht bei zwei gleichen Zahlen?

Ich habe in Java einen Sortieralgorithmus erstellt, welcher einwandfrei funktioniert. Jedoch kann er gedoppelte Zahlen nicht sortieren. Wo ist mein Fehler?

(1 votes)
Loading...

Similar Posts

Subscribe
Notify of
6 Answers
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
MrAmazing2
2 years ago
if (a[j] < a[minIndex]) {
  minIndex = j;
}

Dann sollte es klappen.

Momentan nimmst du immer die hinterste Zahl, die niedriger als a[i] ist, als minIndex. Weil deine Schleife ja bis zur hintersten Zahl läuft, und jedesmal nur überprüft, ob die jeweilige Zahl kleiner ist a[i] ist, anstatt zu überprüfen, ob sie kleiner als das bereits gefundene Minimum ist.

Wenn du also 746 hast, dann würde dein Code den Index von 6 als minIndex ermitteln:

Ist a[j] (4) kleiner als a[i] (7) ? Ja -> minIndex = j
// j wird erhöht 
Ist a[j] (6) kleiner als a[i] (7) ? Ja -> minIndex = j

Wie du siehst wird der minIndex einfach durch die hinterste Zahl, die kleiner als a[i] ist, überschrieben. Dein Code tauscht daher die 7 mit der 6. Was falsch ist, weil er die 7 eigentlich mit der 4 tauschen müsste.

Den Fehler habe ich gefunden, in dem ich es Schritt für Schritt durchgegangen bin und mir angeschaut habe, welche Elemente jeweils vertauscht werden:

(i:0) 246740
(i:1) 046742
(i:2) 026744
(i:3) 024746 <- Fehler

ralphdieter
2 years ago

Mit der inneren for-Schleife bestimmst Du die Position des letzten Elements, das kleiner als A[i] ist. Vermutlich willst Du aber das kleinste. Dazu darfst Du die Elemente nicht mit A[i] vergleichen, sondern mit dem bislang kleinsten gefundenen:

    if ( A[j]<A[minIndex] )
        minIndex = j;
MrAmazing2
2 years ago
Reply to  ralphdieter

Hab ich literally vor 10 Minuten schon geschrieben … 🤔

ralphdieter
2 years ago
Reply to  MrAmazing2

Jepp, aber vor zwei Minuten wurden mir “0 Antworten” angezeigt. Könnte es sein, dass Deine Antwort ausgeblendet wird, während Du sie bearbeitest?

ralphdieter
2 years ago

Passiert mir öfter, aber hier wohl kaum. In der Regel erscheint – auch während ich eine Antwort schreibe – ein Hinweis “1 neue Antwort”. Ich kann dann sogar die Seite neu laden, ohne meine Antwort zu verlieren.

Nur scheint das noch nicht ganz ausgereift zu sein. Die Webentwicklerinnen bei GF sollten dringend mal ihren Code hier als Frage einstellen 🙂

MrAmazing2
2 years ago

Das wäre mir neu 😮

Aber vlt. hattest du die Seite schon 10 Minuten offen und es wurde dir deswegen nicht angezeigt