Zahlen sortieren



  • ja gut dass du es kannst, ich kann es nicht, ich muss leider... 😞

    programmierung ist das einzige wo ich mich noch richtig schwer tue...

    so, jetzt zu deinem queltext, ich muss das programm(quelcode) auf jeden fall mit bubblesort machen

    außerdem wollte ich wissen was an meinem code nichts timmt, denn da bin ich mir sicher, dass da nur irgendein "hacken" fehlt...

    was genau, das fällt mir aber nicht ein 😞

    weiß das jemand sonst?



  • Schau dir mal die beiden Codes an:

    Dein Code:

    oid BubbleSort(int Array)
    
    {
            int iZahl=0;
            int imax;
            int i;
            int temp;
            for (imax=0;imax<2;imax++)
            {
                    for (i=0;i<2;i++)
                    {
                            if (i<2)
                            {
                                     if (Array[i] > Array [i+1])
                                    {
                                            temp=Array[i];
                                            Array[i]=Array[i+1];
                                            Array[i+1]=temp;
                                     }       
                             }
                     }
             }
    }
    

    Mein Code:

    while(!sorted) 
        { 
            sorted = true; 
    
            for(unsigned short i = 0; i < (max-1); i++) 
            { 
    
                if(unsorted[i] > unsorted[i+1]) 
                { 
                    sorted = false; 
                    temp = unsorted[i+1]; 
                    unsorted[i+1] = unsorted[i]; 
                    unsorted[i] = temp; 
                } 
            } 
        }
    

    1. Statt "for" nimmst du "while" ganz außen.
    2. Unser Code unterscheidet sich nicht wesentlich, nur mit den Schleifen hast du noch Probleme denk ich.
    3. Einmal "if" zuviel.

    So, jetzt vergleiche unsere Codes, meiner ist die "ausgebesserte" Variante von deinem, und es ist der Bubble-Sort.

    //EDIT:
    Wichtig ist doch, dass du die äußerste Schleife verlassen musst, wenn in einem Durchlauf der Ausdruck "x[i] > x[i+1]" false hat. Dieser ist false, wenn eben nichts mehr vertauscht wurde, also das letzte Element schon das größte ist.



  • gaaanz einfach mithilfe der stl:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
     vector<int> zahlen; // da kommen die zahlen rein
     srand(time(NULL)); // zufallsgenerator initialisieren
     for(int i = 0; i < 10; ++i)
      zahlen.push_back(rand()%10); // 10 zufallszahlen zwischen 0 und 9 generieren
     sort(zahlen.begin(), zahlen.end());
     for(int i = 0; i < zahlen.size(); ++i)
      cout << zahlen[i] << endl; // zahlen ausgeben
    }
    


  • ich habe ein passendes struktugramm und laut diesem ist for 2 mal drin...

    ich MUSS das so mit bubblesort machen, ist so vorgegeben!

    wie kann man meinen code abändern dass es läuft? probiert mal bei euch den aus..

    gruß



  • Wie oft noch???

    Wenn du unbedingt 2x for verwenden willst, dann änder doch meinen Code ab:

    while(!sorted) 
        { 
            sorted = true; 
    
            for(unsigned short i = 0; i < (max-1); i++) 
            { 
    
                if(unsorted[i] > unsorted[i+1]) 
                { 
                    sorted = false; 
                    temp = unsorted[i+1]; 
                    unsorted[i+1] = unsorted[i]; 
                    unsorted[i] = temp; 
                } 
            } 
        }
    

    Bei deinem Code ist außerdem ein "if" zuviel, also schaut es dann sowieso so aus wie bei mir.
    Wenn du es nicht schaffst meinen Code abzuändern, dann sag bescheid...



  • Weißt du was, bevor du fragst...

    const unsigned short max = 5; 
    unsigned short temp; 
    unsigned short unsorted[max]; 
    
    //unsorted einlesen
    
    for(unsigned short sorted = 0; sorted <= 0;)
    { 
        sorted = 1;
        for(unsigned short i = 0; i < (max-1); i++) 
        { 
    
            if(unsorted[i] > unsorted[i+1]) 
            { 
                sorted = 0; 
                temp = unsorted[i+1]; 
                unsorted[i+1] = unsorted[i]; 
                unsorted[i] = temp; 
            } 
        } 
    } 
    
    //unsorted ausgeben
    


  • @ ceplusplus

    den code läuft nicht (borland c++ 6)



  • Und was "läuft nicht"? 🙄



  • int main() 
    { 
        const max = 5; 
        unsigned short temp; 
        unsigned short unsorted[max]; 
    
        cout << "Geben Sie " << max << " Zahlen ein: " << endl; 
        for(unsigned short c = 0; c < max; c++) 
            cin >> unsorted[c]; 
        cout << "Die Zahlen werden nun aufsteigend sortiert..." << endl << endl; 
    
        for(unsigned short sorted = 0; sorted <= 0;)  
        { 
            sorted = 1; 
    
            for(unsigned short i = 0; i < (max-1); i++) 
            { 
                if(unsorted[i] > unsorted[i+1]) 
                { 
                    sorted = 0; 
                    temp = unsorted[i+1]; 
                    unsorted[i+1] = unsorted[i]; 
                    unsorted[i] = temp; 
                } 
            } 
        } 
    
        cout << "Ergebnis: " << endl; 
        for(unsigned short x = 0; x < max; x++) 
            cout << unsorted[x] << endl; 
        cout << endl << "Fertig." << endl; 
    
        return 0; 
    }
    


  • Der sort aus der STL geht auch ohne vector mit nem stinknormalen Array, wenn du Container nicht magst.
    Alternativ gibts auch qsort aus der mitgelieferten C-Bibliothek, machen beide dasselbe: Quicksort


Anmelden zum Antworten