Problem bei MinSort Algorithmus in C#

Erste Frage Aufrufe: 527     Aktiv: 31.05.2022 um 17:02

0

Also Ziel ist es, ein Array beliebiger Zahlen mit der MinSort Sortierung einmal aufsteigend und absteigend anzuzeigen. Es geht nicht um ein komplexes Programm oder so, das hier war nur zum Probieren, ob die Fehler noch im isolierten Programm da sind. Ich habe mich an dem allgemeinen Struktogramm orientiert, aber irgendwie funktioniert es nicht so, wie es soll. Es werden zwar keine Fehler im Code angezeigt, aber beim Einsetzen unterschiedlicher Zahlen gibt es immer wieder Fehler. Die Ordnung ist nie komplett falsch, aber eben auch nicht richtig. Auch Lehrer und Mitschüler haben keinen offensichtlichen Fehler gefunden.

enter image description here

enter image description here

Da morgen mündliche Info-Prüfung ist, würde ich mich über Hilfe freuen :)

Diese Frage melden
gefragt

Punkte: 12

 
Kommentar schreiben
1 Antwort
0

Dein Fehler befindet sich in der zweiten for Schleife. Wir gehen deinen Code mal Schritt für Schritt durch

int min = i;

Hier haben wir im ersten Durchlauf i=0, also ist hier min=0 und i=0 Jetzt geht es in die zweite for schleife

Begonnen wird mit

j = i + 1 = 1

Damit ist

a[j]=a[1]=2 und a[min]=a[0]=51

Die Bedingung ist erfüllt, es wird min = 1 gesetzt. Du hast korrekterweise detektiert dass die zweite Zahl kleiner ist als die ersten du tauscht 51 und 2

und dein Array sieht so aus:

2, 51, 3, 4, ...

Zweiter Durchlauf der Schleife:

j=2

Hier ist jetzt dein Fehler. Im vorherigen Durchlauf wurde min = 1 gesetzt, du vergleichst also nicht mehr mit der ersten Zahl (die die bis jetzt kleinste ist), sondern mit der zweiten, und die ist 51. Deine if Bedingung ist:

a[2] < a[1] und das wird wieder true, denn 3 < 51.

Damit wird min = 2

Jetzt tauscht du wieder die Elemente mit Index min=2 und i. i ist aber weiterhin 0 weil wir noch im ersten Durchlauf der ersten Schleife sind. Du tauscht jetzt also 2 und 3. Dein neues Array ist dann

3, 51, 2, 4, ...

Also ab hier wird alles falsch.

Das kannst du jetzt entweder korriegeren, oder deinen Algorithmus insgesamt überdenken. Ich würde dir empfehlen nicht direkt zu tauschen, sondern immer erst nachdem du einmal das ganze Array durchsucht hast. Dazu erstmal nur den Index mit der kleinsten Zahl speichern, und dann final tauschen. Ist meiner Meinung nach etwas einfacher zum Denken. Aber das musst du selbst wissen. Ob es da ne wirkliche Definition gibt wann es noch so ein Selection Sort ist weiß ich nicht, vielleicht ist es nicht erlaubt die ganze Zeit zu tauschen. Ich kenne min sort so: Erst Minimum im rechten Teilarraysuchen, dann tauschen, dann index einen weiter schieben...

Diese Antwort melden
geantwortet

Punkte: 160

 

Dankeschön, habs jetzt korrigiert und es funktioniert wieder so, wie es soll :)

  ─   throwaway.9 31.05.2022 um 17:02

Kommentar schreiben