Array sortieren von niedrig nach hoch
-
vfbf4n1893 schrieb:
Hallo,
...
D.h. in der Schleife für den Sortiergvorgang nimmt er irgendwas nicht auf. Ich will da die Temp[i] mit der temp[i+1] vertauschen. Wieso geht das so nicht?Das hat mehrere Gründe.
Zum einen ist == ein Vergleichsoperator, für eine Zuweisung musst du = nehmen.
Zum anderen brauchst du eine Hilfsvariable, wenn du Werte zweier Zahlen tauschen willst:int main ( void ) { int a = 4, b = 5, // Die Werte der Variablen sollen getauscht werden. c = 0; // Hilfsvariable printf ( "a = %d b = %d\n", a, b ); c = a; // Wert von a zwischenspeichern a = b; // a bekommt den Wert von b b = c; // b bekommt den Wert von a printf ( "a = %d b = %d\n", a, b ); return 0; }
-
CJosef schrieb:
Zum anderen brauchst du eine Hilfsvariable, wenn du Werte zweier Zahlen tauschen willst:
Lustigerweise geht das sogar ohne dritte Variable, zum Beispiel so (kann man noch kompakter schreiben wenn man moechte):
void swap(int *x, int *y) { if ( *x == *y ) return; *x = *x ^ *y; *y = *x ^ *y; *x = *x ^ *y; }
Ist sicher nicht effizienter als Swap mit einer dritten Variable. Aber ich fands ziemlich cool als ich es das erste Mal gesehen habe
-
int i, j; int temp[10], k; printf("Bitte geben Sie nun 10 Temperaturen ein, dass Programm sortiert diese von niedrig nach hoch:\n"); for(i=0;i<10;i++) //Schleife zum Eingeben der Temperaturen { printf("Temperatur %d:", i+1); scanf("%d", &temp[i]); } for(j=0;j<10;j++) // Schleife für die Durchgänge des Sortierens { for (i=0;i<10;i++) // Schleife für den Sortiervorgang { if (temp[i]>temp[i+1]){ k = temp[i]; temp[i] = temp[i+1]; temp[i+1] = k; } } } for(i=0;i<10;i++) //Schleife zur Ausgabe der Temperaturen printf("%d. Temperatur: %d\n", i+1, temp[i]); return 0; }
hab das nun mal so gemacht, jetzt sortiert er mir die zahlen zwar, allerdings nur bis 9? Sobald ich höhere zahlen wie 9 eingebe, gibt er trotzdem nur noch 9er aus? Wieso das?
-
in zeile 18 und 19 schreibst du über array grenzen hinaus.
das ist ein memory error und ist pfui!
-
zeh proviech schrieb:
in zeile 18 und 19 schreibst du über array grenzen hinaus.
das ist ein memory error und ist pfui!achja, der zugriff in zeile 16 ist auch verboten,
ich fasse zusammen:vfbf4n1893 schrieb:
if (temp[i]>temp[i+1]){ // <--- PFUI !!! k = temp[i]; temp[i] = temp[i+1]; // <--- PFUI !!! temp[i+1] = k; // <--- PFUI !!! } }
-
for(j=0;j<10;j++) // Schleife für die Durchgänge des Sortierens { for (i=0;i<10;i++) // Schleife für den Sortiervorgang { if (temp[i]>temp[i+1]){ k = temp[i]; temp[i] = temp[i+1]; temp[i+1] = k; } } }
Diese Schleife ist auf jeden Fall so nicht OK!
Das Array temp geht von Index 0 bis 9.
In der Schleife zählt die Ariable i von 0 bis 9.
Es wird aber z.B. mit temp[i+1] auch auf das Arrayelement 9+1 also das 10 zugegriffen, welches nicht existiert.Versuche es selbst zu korrigieren. Wenn du es nicht schaffst melde dich wieder.
-
Korrektur des Textes: Ariable = Variable
-
Swordfish schrieb:
for (i=0;i<10;i++) // läuft um 1 zu weit.
old news.
-
LOL hatte ich nicht mal gesehen, als ich helfen wollte. Ich bin davon ausgegangen, dass man sich bemüht alle schon angegebenen Fehler zu beheben bevor man seinen Code wieder einstellt.
-
MisterX schrieb:
[...] Ich bin davon ausgegangen, dass man sich bemüht alle schon angegebenen Fehler zu beheben bevor man seinen Code wieder einstellt.
ROFLMAO, YMMD!!