BubbleSort in richtiger Reihenfolge



  • Hallo zusammen,
    ich habe vor längeren Zeit mal den BubbleSort implementiert. Dabei habe ich erst beide Schleifen in die gleiche Richtung laufen lassen. Dabei wurde aber immer ein Element ausgelassen. Deswegen habe ich jetzt diese Version, die auch funktioniert:

    void BubbleSort(int *arr, int n)
    {
     for (int i = n-1; i > 0; i--)
     {
      for (int j = 0; j < i; j++)
      {
       if (arr[j] > arr[j + 1])
       {
        int swp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = swp;
       }
      }
     }
    }
    

    Meine Frage ist nun, ob es möglich ist und wenn ja wie, dass die erste Schleife auch bei 0 beginnt und ebenfalls korrekt sortiert wird.

    Vielen Dank für eure Hilfe
    lg, freakC++



  • void bubblesort(int* arr, int size)
    {
       bool change = true;
       while(change)
       {
           change=false;
           for(int i = 0; i != size-1 && !change;++i)
           {
               if(arr[i+1]<arr[i]
               {
                   change=true;
                   std::swap(arr[i],arr[i+1]);
               }
           }
       }
    }
    


  • Mmh..das ist der implementierte Pseudecode. Wahrscheinlich ist der besser, doch frage ich mich, ob man auch eine geschachtelte for-SChleife in gleiche Richtung laufen lasssen kann.

    Vielen Dank für deine Hilfe
    lg, freakC++

    PS: Da fehlt eine Klammer 😉



  • Noch eine Frage zu deinem Code. Warum muss es in Zeile 7 eigenlich "i != size-1" heißen? i muss doch bis zum letzten Element, also size-1 wandern. Hier würde es nur bis zum vorletzen gehen?

    Vielen Dank
    lg, freakC++



  • du vergleichst doch das letzte elemtent ( arr[i+1] ) mit dem vorletzen ( arr[i] ). Dadurch wird das letzte element mit sortiert. Würdest du i != size prüfen, würde arr[i+1] hinter das array zeigen, was ja undefiniert ist.



  • Ach klar :xmas1: Danke für die schnelle Antwort!

    Bis bald
    lg, freakC++


Anmelden zum Antworten