Array sotieren
-
Moin Leute, vielleicht kann mir jemand von euch weiterhelfen.
Ich möchte in einem Zahlen-Array die Zahlen absteigend sotieren.
Nur Leider funktioniert mein Programm nicht.
Weiß vielleicht jemand wo da der fehler drinn steckt?
Ausschnitt des Programmes://Variablendeklaration int nummer[5]; int temp[5]; int sort[5]; int i; int j; //Eingabeteil for(i=0;i<=4;i++) { printf("%i.Zahl :",i+1); scanf("%i",&nummer[i]); } //Verarbeitungsteil for(j=0;j<=4;j++) { temp[j]=nummer[j]; } for(i=0;i<=4;i++) { for(j=0;j<=4;j++) { if((nummer[i]>=temp[j]) && (temp!=0)) { sort[i]=temp[j]; temp[j]=0; } } }
Logik:
Alle eingegebene Nummern werden aus dem array "nummer" in das array "temp" kopiert.Nun wird eine Abfrage gemacht. Wenn die Nummer[i] größer als die nummer temp[j] ist wird die nummer von temp[j] in sort[i] kopiert. Als nächstes wird die Nummer in temp[j] gelöscht,damit beim nächsten Durchgang nicht nocheinmal die gleiche zahl verwendet wird.Meine Ausgabe sieht wie folgt aus:
Eingabe:
1.Zahl :1
2.Zahl :3
3.Zahl :2
4.Zahl :4
5.Zahl :5Sotierte Ausgabe:
1.Zahl :1
2.Zahl :2
3.Zahl :[0]
4.Zahl :4
5.Zahl :5Wo steckt der Fehler?
-
Dein Fehler ist, daß du einen vernünftigen Sortieralgorithmus benötigst - im Extremfall löschst du im ersten Durchlauf des for(i) bereits alle Werte aus temp raus und stehst beim zweiten Durchgang vor einem leeren Array.
(btw, die Bedingung "temp!=0" ist Käse)
-
temp**[j]**!=0
-
temp[j]!=0 hab ich auch schon einmal probiert,aber das bringt auch nichts...
-
Warum setzt du am Ende temp[j]=0?
Da ist diese Zahl doch beim nächsten Schleifendurchlauf die kleinste und erfüllt deine Bedingung.Oder hab ich da nen Denkfehler?
-
Eventuell siehst du ja deinen logischen Fehler, wenn du das Programm Schritt für Schritt durchlaufen lässt:
i j nummer temp n[i]>=t[j] sort 1 3 2 4 5 1 3 2 4 5 0 0 1 3 2 4 5 1 3 2 4 5 true 1 1 0 3 2 4 5 false ... 4 false 1 0 1 3 2 4 5 0 3 2 4 5 false 1 1 3 2 4 5 0 3 2 4 5 true 1 3 2 1 3 2 4 5 0 0 2 4 5 true 1 2 3 1 3 2 4 5 0 0 0 4 5 ...
Hier siehst du schon den Fehler - du hast bisher drei Werte gestrichen, aber erst zwei Werte in die sortierte Folge eingefügt.
Mal ein paar Alternativen, die auch funktionieren werden: Sortierung
-
so alles klar habe mein Programm nun so umgeschrieben:
int nummer[5]; int temp; int sort[5]; int i; int j; for(i=0;i<=4;i++) { for(j=0;j<=4;j++) { if(sort[j-1]>sort[j]) { temp=sort[j]; sort[j]=sort[j-1]; sort[j-1]=temp; } } }
Und es funktioniert 100%ig
vielen Dank