Datensortierung



  • Hi,.

    und zwar möchte ich die Informationen, die sich in einem Feld befinden sortieren (ohne Bubblesort)

    Ich geh so vor den größten wert zu suchen

    int x;
    int big;
    int king;
    int alter[] = {5,8,3};
    
    int main(int argc, char *argv[])
    {       
    
         for(x=0; x<3; x++)
       {
                if(alter[x] > big)
                {
                     big = alter[x];
                     king = king + 1;
                }
       }                          
       cout << "\n\n" << king;  (king ist 3 also Array[2])
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Und dann möchte ich ja den größten wert löschen,..das er im feld eine 0 hat,..und dann soll er den 2 größten wert suchen und so weiter aber ich bekomme das nicht hin,.

    alter[king] = 0;

    und eine weitere schleife dann laufen zulassen ich hoffe auf Hilfe,..

    das es dann so aussieht array[2] < array[0] < array[1];

    array[2] = 3

    array[0] = 5

    array[1] = 8
    mfg

    Svolf



  • Svolf schrieb:

    Und dann möchte ich ja den größten wert löschen,..das er im feld eine 0 hat,..und dann soll er den 2 größten wert suchen und so weiter aber ich bekomme das nicht hin,.

    alter[king] = 0;

    und eine weitere schleife dann laufen zulassen ich hoffe auf Hilfe,..

    das es dann so aussieht array[2] < array[0] < array[1];

    array[2] = 3
    array[0] = 5
    array[1] = 8

    Hallo Svolf,

    zunächst musst Du Dir in der Variablen 'king' den Index und nicht die Anzahl der Versuche merken, die Du benötigst, um das Maximum zu finden.

    Dann kannst Du das ganze in eine weitere Schleife fassen, die jeweils das Maximum und den zugehörigen Index ausgibt. Also:

    #include <iostream>
    
    int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg
    {
        using namespace std;
        int alter[] = {5,8,3};      // lokale Variablen sind globalen vorzuziehen
        for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf )
        {
            int king;
            int big = -9999;        // mit kleinem Wert initialisieren; => std::numeric_limits< int >::min()
            for( int x=0; x<sizeof(alter)/sizeof(*alter); ++x )  // besser: x < sizeof(alter)/sizeof(*alter) statt x<3
            {
                if(alter[x] > big)
                {
                    big = alter[x];
                    king = x;       // Index des Maximums in alter[] merken
                }
            }     
            cout << "\nalter[" << king << "] = " << alter[king] << endl;  // ausgeben
            alter[king] = 0;        // Maximum 'abschalten'
        }
    
        cin.get();                  // besser als system("PAUSE"); siehe FAQ
        return 0;
    }
    

    und für den Interessierten noch mal die Alternative mit STl-Hilfe:

    #include <iostream>
    #include <algorithm>    // max_element
    
    int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg
    {
        using namespace std;
        int alter[] = {5,8,3};      // lokale Variablen sind globalen vorzuziehen
        for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf )
        {
            int* iMax = max_element( alter, alter + sizeof(alter)/sizeof(*alter) );
            cout << "\nalter[" << (iMax-alter) << "] = " << *iMax << endl;  // ausgeben
            *iMax = 0;              // Maximum 'abschalten'
        }
    
        cin.get();                  // besser als system("PAUSE"); siehe FAQ
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten