Sortowanie Bąbelkowe

Na początku, czym ono w ogóle jest??

Sortowanie bąbelkowe (ang. bubble sort) to prosta metoda sortowania, o złożoności czasowej O(n2) i pamięciowej O(1). Polega na porównywaniu dwóch kolejnych elementów i zamianie ich kolejności, jeżeli zaburza ona porządek, w jakim się sortuje tablicę. Sortowanie kończy się, gdy podczas kolejnego przejścia nie dokonano żadnej zmiany.

To definicja według wiki, ale z polskiego na nasze, co to robi i czym to się je??

No więc mamy jakąś tablicę, oczywiście może być nieuszeregowana, no i trzeba posortować w niej liczby. jak to robimy?? Mamy powiedzmy takie liczby:

2, 5, 7, 3, 5, 2, 3, 9

No więc patrzymy na pierwszą liczbę i porównujemy ją z kolejną. Ta druga jest większa, a więc wszystko gra, teraz "przesuwamy" się o jedno pole w prawo i porównujemy kolejne dwie liczby, 5 i 7, no i 5 < 7, więc wszystko OK, znowu się "przesuwamy" i porównujemy 7 i 3, ale 7 > 3, więc nie tak powinno być!! Co my z tym robimy?? zamieniamy je miejscami i otrzymujemy coś takiego:

2, 5, 3, 7, 5, 2, 3, 9

i teraz porównujemy 7 i 5, znowu nie tak powinno być, więc hop, zamieniamy je i tak dalej aż do końca. Co nam z tego wyszło??

2, 5, 3, 5, 2, 3, 7, 9

Wygląda nieco lepiej, ale ciągle nieposortowane do końca. Powtarzamy więc to do znudzenia aż wszystko się ustawi jak ma być ;) Tylko jak to napisać??

void sortuj(int tablica[], int n) // n to długość tablicy
{
   bool a=1; // a odpowiada na pytanie, czy były jakieś zmiany
   while(a==1)   //powtarzaj tak długo, jak są jakieś zmiany
   {
      a=0;
      for (int i=0; i<n-1; i++) 
          if (tablica[i]>tablica[i+1]) {a=1; swap (tablica[i], tablica[i+1]);}  //w przypadku, gdy napotka dwie nieposortowane liczby 
   }                                                                            //zamienia je miejscami i ustawia "a" na 1, czyli prawda
}
 
/* uwaga!!!! tu jest i < n-1, dlaczego?? bo gdyby i dojechało do ostatniej liczby w tablicy (tablica[n-1]) to porównując tą liczbę z 
następną liczbą (tj. tablica[n]) porównywałoby nieistniejące liczby, co mogłoby albo spowodować posypanie się programu, albo dziwne 
wyniki */
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License