C Insertion sort Algorithmus

Erste Frage Aufrufe: 650     Aktiv: 06.11.2021 um 09:03

0

enter image description here

Hallo! Ich soll für meine Übung einen Insertion Sort Algorithmus schreiben. Anhand meines Anhangs könnt ihr sehen was ich als Code bisher geschrieben habe. Die Funktionen zum Ausgeben wurde uns schon vorgegeben, deshalb habe ich sie weggelassen. Meine Frage ist relativ simpel. Warum sortiert er mir bei meiner Ausgabe die Zahlen nicht von klein nach groß. Er gibt sie lediglich in der Reihenfolge aus, wie sie eingegeben wurden. Meiner Meinung nach sollte es so aber richtig sein. Eine Hilfestellung wäre super! LG

Diese Frage melden
gefragt

Punkte: 12

 

Hallo user99b3d5, ich würde Dir gerne helfen, habe aber folgendes noch nicht verstanden: wo befinden sich die Zahle zu Beginn unsortiert? In array[]? WO sollen sie sich nachher befinden? Auch in array[] oder soll die ermittelte Zahl direkt ausgegeben werden?
Gruß jobe

  ─   jobe 04.11.2021 um 19:27
Kommentar schreiben
1 Antwort
0

Hallo user99b3d5, vielleicht bist du ja schon fertig, vielleiht verstehst du meinen Kommentar nicht. Daher versuche ich die zwei Möglichkeiten aufzuzeigen.

array[] ist Input, die Zahlen werden direkt ausgegeben.

int merker = INT_MAX;
int pos;
for (int loop = 0; loop < len; loop++){
      // Diese Schleife geht so oft durchs Array wie es Elemente hat. Damit sind dann alle Zahlen ausgegeben
      // und das Array ist mit INT_MAX gefüllt.
      for(int i=0; i< len; i++){
      // Diese Schleife geht das Array durch und sucht den aktuell kleinsten Wert, merkt sich den Wert
      // und seine Position
          if (array[i] < merker){
              pos = i;
              merker = array[i];
          }
          // Nachdem alles durch ist befindet sich in Merker der kleinste Wert. Der wird ausgegeben
          // und dann im Array gelöscht.
          Ausgabe(merker)
          array[pos]=INT_MAX
    }

}

ODER Du musst das Array erst sortieren und dann ausgeben. Dann brauchst du einen Dreieckstausch.

    // Die Schleifen laufen immer eins kürzer als das Array lang ist. Du hast immer zwei Elemente in Arbeit.
    for (int loop = 0; loop < (len-1); loop++){
        for (int i = 0; i < (len-1); i++){
                if (array[i] > array[i+1] {
                // Wenn links(i) größer ist als rechts(i+1) muss man tauschen.
                int temp;
                temp = array[i];
                array[i] = array[i+1];
                array[i+1]=temp;
            }
        }
    }

Jetzt ist das Array sortiert und kann ausgegeben werden. Natürlich gibt es noch optimalere Algorithmen und auch bei diesen Beispielen Optimierungsmöglichkeiten. Überleg dir welche.

Gruß jobe

Diese Antwort melden
geantwortet

Sonstiger Berufsstatus, Punkte: 505

 

Ich habe lediglich ganz unten bei der Aufgabe die Ausgabe vergessen. Aber trotzdem danke für die ausführliche Antwort!

  ─   user99b3d5 05.11.2021 um 20:45

Hallo user99b3d5, und hier wieder eine Grundregel des Programmierens: jede Zeile Code muss durchlaufen und überprüft werden! Ich habe beide Beispiele aus dem Kopf aufgeschrieben. Prompt befindet sich in meinem ersten Beispiel ist ein Fehler. Findest du ihn? Gruß jobe

  ─   jobe 06.11.2021 um 09:03

Kommentar schreiben