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!! 😃


Anmelden zum Antworten