Problem mit einer Sortierfunktion...



  • (Vornweg..weiß nicht obs das richtige Board is..)

    Hi leute, also ich habe mir für eine Übung eine Sortierfunktion die ein Integer Array sortiert gebastelt. (Sicher nicht die schönste und beste variante..aber egal)

    Im Grunde funktioniert auch alles Prima, aber ich versteh nicht wieso der genau andersrum sortiert als ich will. .&%&$§

    Wenn ich sage er solle immer die kleinste Zahl in das erste Feldelement setzten dann steht da zum Schluss die größte drin und umgekehrt....

    Vielleicht blickt da einer von Euch durch ??

    #include <iostream>
    #include <stdio.h>
    
    using namespace std;
    
    void feldausgeben(int* feld,int n);   //Funktionsprototypen
    void sort(int* feld,int n);
    
    int main(void) {
    int feld[20]={110,3,2,4,5,7,6,8,10,9,9,100,101,99,98,1,200,400,450,650};  //Feld wird mit 20 Integer Initialisier
    
    feldausgeben(feld,20);   //feld unsortiert ausgeben
    sort(feld,20);           //feld sortieren
    feldausgeben(feld,20);   //feld sortiert ausgeben
    
    	return 0;
    }
    
    void feldausgeben(int* feld,int n) {   //Funktion dient zum ausgeben des feldes
    cout << endl;
    	for (int i=0; i<n;i++) {
    		cout << "Element " << i+1 << " = " << feld[i] << endl;     //feldelemente der reihe nach couten
    	}
    	cout << endl;
    	return;
    } //funkionsende
    
    void sort(int* feld,int n) {  //sortierfunktion
    int buffer; //variable zum zwischenspeichern der zu tauschenden integer
    
    for (int i=0;i<n;i++) {  //"obere" schleife  i zeigt auf das element in welches geschrieben werden soll
    
    	for (int i2=0;i2<n;i2++) { //"untere" schleife  i2 zeigt auf das element welches mit i verglichen wird
    
    		if (feld[i2] < feld[i]) {   //wenn i2 kleiner als i dann...
    			buffer = feld[i];        //erstmal den buffer mit feld[i] füllen
    			feld[i] = feld[i2];      //dann feld[i] mit feld[i2] füllen
    			feld[i2] = buffer;       //dann feld[i2] mit dem buffer füllen
    		} // if zu                   //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben
    
    	} // for 2 zu               //läuft solange durch bis feld[i] das letzte element ist
    
    } // for 1 zu
      return;
    } // funktion ende
    

    😡
    So sollte eigentlich die erste Variable eine 1 sein...isses aba nich.



  • Hi!

    Der Fehler ist hier:

    for (int i=0;i<n;i++) {  //"obere" schleife  i zeigt auf das element in welches geschrieben werden soll 
    
        for (int i2=0;i2<n;i2++) { //"untere" schleife  i2 zeigt auf das element welches mit i verglichen wird 
    
            if (feld[i2] < feld[i]) {   //wenn i2 kleiner als i dann... 
                buffer = feld[i];        //erstmal den buffer mit feld[i] füllen 
                feld[i] = feld[i2];      //dann feld[i] mit feld[i2] füllen 
                feld[i2] = buffer;       //dann feld[i2] mit dem buffer füllen 
            } // if zu                   //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben 
    
        } // for 2 zu               //läuft solange durch bis feld[i] das letzte element ist 
    
    } // for 1 zu
    

    Du hast i mit i2 verwechselt .... also:

    for (int i=0;i<n;i++) {  //"obere" schleife  i zeigt auf das element in welches geschrieben werden soll 
    
        for (int i2=0;i2<n;i2++) { //"untere" schleife  i2 zeigt auf das element welches mit i verglichen wird 
    
            if (feld[i] < feld[i2]) {   //wenn i2 kleiner als i dann... 
    
    			buffer = feld[i2];        //erstmal den buffer mit feld[i] füllen 
                feld[i2] = feld[i];      //dann feld[i] mit feld[i2] füllen 
                feld[i] = buffer;       //dann feld[i2] mit dem buffer füllen 
            } // if zu                   //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben 
    
        } // for 2 zu               //läuft solange durch bis feld[i] das letzte element ist 
    
    } // for 1 zu
    

    Ich glaube das ist der Grund. kann aber nichts garantieren, weil ichs nicht getestet hab.

    mfG
    berni.l



  • mhh..doch so simpel....*peinlich...*

    Ja ok, dann funktioniert es so wie es eigentlich soll 🙂

    Danke dir....


Anmelden zum Antworten