Sortieralgorithmus Flussdiagramm?


09.05.2020, 15:06

Habe einen Fehler entdeckt: Statt Liste[i] = Liste[j] hätte ich beim Dreieckstausch Liste[i] = Liste[i+1] schreiben müssen.

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Nein, da ist definitiv etwas durcheinander gekommen. j scheint der Iterator der inneren Schleife zu sein, fertig bist Du aber erst, wenn die äußere Schleife durch ist.

Nachtrag: *hust* vergiß was ich sagte, j ist der Iterator der äußeren Schleife. Allerdings müßtest Du dann i nach der Prüfung von j auf 0 initialisieren.

idontknowwww 
Fragesteller
 09.05.2020, 15:02

OKay danke für dein Feedback. Ich gehe es nochmal durch^^

0
idontknowwww 
Fragesteller
 09.05.2020, 15:02

Achso stimmts dann doch?^^

0
KarlRanseierIII  09.05.2020, 15:06
@idontknowwww

Stimmt fast, also, Du prüfst ob j=z-1 ist, das sollte aber j=n-1 sein, direkt nach der Prüfung (bei NEIN) sollte ein i:=0 rein. Die innere Schleife läuft immer bis zum vorletzten unsortierten Element (z-1), die äußere muß natürlich Gesamtzahl Elemente -1 mal ausgeführt werden.

1
idontknowwww 
Fragesteller
 09.05.2020, 15:12
@KarlRanseierIII

Ah stimmt. Ich glaub ich habs gecheckt. Und dann kann ich das i := 0 ja auch oben löschen. Ich schreibe das Dokument mal um und poste hier dann einen Link mit meiner angepassten Lösung.

0
KarlRanseierIII  09.05.2020, 15:16
@idontknowwww

Japp, mache Dir einfach folgendes klar:

for (int i=0;i<n;++i)

ist äquivalent zu:

int i=0;
while (i<n){
   Loop Body
   ++i;
}

Wenn also im Loop Body ein weitres for stünde, liegt der initialisierer eben im Körper der Schleife, nicht davor ;-).

Das 'äquivalent' ist ein wenig geflunkert, denn das Scoping ist etwas anders, aber wir wollen ja keine Korinthen k...en.

1
KarlRanseierIII  09.05.2020, 15:29
@idontknowwww

Ich sehe da noch einen kleinen Fehler im Swap: x=Liste[i];Liste[i]=Liste[i+1];Liste[i+1]=x;

Ein j hat da nichts zu suchen :-). Du hattest zwar den Fehler gemerkt, aber unvollständig korrigiert.

1