Bubblesort



  • Hallo ich habe in einem Array 3 Zahlen ich will das dass Programm die Zahlen so ausgibt: 321

    Das ganze soll mit diesem Bubblesort Algorithmus geschehen ..

    Ich vergleiche hier ja Zahl 0 mit Zahl 1 aus dem Array zahl aber wenn z.b. zahl[0] größer ist als zahl[1] oder zahl[3] größer als zahl[0] und so um das zu prüfen müsste ich ja etliche if Abfragen machen -.-

    Aber das ist ja irgenwie nicht der Sinn von Bubblesort.

    Hier ist mal ein Ansatz von mir ...

    #include <iostream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    int zahl[4] = {1,2,3};
    int s[4] = {0,0,0};
    
     for (int i = 0 ; i<3 ; i++)
     {
    
            if ( zahl[i] < zahl[i+1] )
            {
             s[i] = zahl[i+1];
            }
     }
    
    cout<<s[0];
    cout<<s[1];
    
    system("PAUSE");
    }
    


  • du hast bubblesort nicht verstanden.
    bubblesort sortiert inplace.

    dh, wenn a > b dann tausche die beiden elemente



  • Achso xD ^^

    Aber wie kann ich den die Werte vertauschen muss ich dann erst irgendwo zwischen Speicher ?

    Weil so wäre das ja Quatsch:

    for (int i = 0 ; i<3 ; i++)
     {
    
            if ( zahl[i] < zahl[i+1] )
            {
             speicher[1] = speicher[0];
             speicher[0] = speicher[1];
            }
     }
    


  • Wenn du in jeder Hand eine Vase hast und du willst die Vasen tauschen - was machst du?

    Wenn du gut jonglieren kannst, kannst du ja die eine Vase hochwerfen und die andere schnell in die andere Hand nehmen und die Vase dann wieder fangen.

    Oder du machst die warmduscher lösung und stellt die eine Vase auf einen Tisch, nimmst die andere in die andere Hand und nimmst die Vase vom Tisch wieder in die Hand.



  • Mit

    speicher[1] = speicher[0]; 
    speicher[0] = speicher[1];
    

    würde nur der Wert in speicher[1] mit dem Wert aus speicher[0] überschrieben werden und das war es. Du musst schon eine temporäre Variable nutzen. Außerdem du prüfst mit der Indizierung durch i und nutzt im if-Block dann Konstanten. Du solltest schon die Werte tauschen (dazu musst du natürlich das Tauschen richtig implementieren) die du auch vergleichst und nicht immer die gleichen Werte.

    Aber das ist auch immer noch nicht Bubblesort, zumindest nicht vollständig. Bubblesort besteht eigentlich aus zwei Schleifen. Da fehlt also noch etwas. Wie Bubblesort funktioniert kannst du unter anderem bei Wikipedia nachlesen.

    Greetz



  • Schreib dir zum Tauschen eine Funktion, die zwei Referenzen annimmt (wenn du nicht gleich std::swap verwenden willst), dann kannst du die wiederverwenden.


Anmelden zum Antworten