Sortowanie bąbelkowe
Sortowanie bąbelkowe jest jednym z najprostszych w implementacji algorytmów porządkujących dane. Złożoność tego sposobu sortowania jest rzędu O(n2). Oznacza to, że sortowanie bąbelkowe nie poradzi sobie z porządkowaniem większych zbiorów.
Nazwa wzięła się stąd, że dane podczas sortowania – tak jak bąbelki w napoju gazowanym – przemieszczają się ku prawej stronie i układają się w odpowiednim szyku.
Algorytm działa następująco:
w każdym przejściu pętli wewnętrznej porównywane są ze sobą dwie kolejne wartości i w razie potrzeby są zamieniane miejscami. W jednym cyklu pętli wewnętrznej, największa liczba (tak jak bąbelki w napoju gazowanym) w zbiorze będzie się przemieszczała na ostatnią pozycję. W ten sposób otrzymujemy podzbiór częściowo już posortowany. Czynności te powtarzamy dla zbioru pominiętego o elementy już poukładane. Prześledźmy przykład:
posortujemy tą metodą następujące dane
3 2 4 3 1 2 0
Pętla wewnętrzna porówna sąsiadujące ze sobą elementy. Dla n elementów zostanie wykonanych n−1 porównań:
sytuacja po pierwszym cyklu pętli wewnętrznej: 2 3 3 1 2 0 4
Największa liczba (w tym przypadku 4 ) przesunęła się na ostatnią pozycję. Został nam teraz do posortowania zbiór elementów pominięty o tą liczbę. Powtarzamy teraz czynności dla n−1 elementów. W ten sposób liczba 3 wskoczy na przedostatnią pozycję. Powtarzamy te kroki, aż otrzymamy zbiór posortowany.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
int n; // Zmienna typu int o nazwie n wskazuje na ilosc elementow tablicy.
int *tablica; // Tworzymy tablice dynamiczna. Wymagany wskaznik.
cout << " Ilość elementów tablicy: "; cin >> n; // Okreslamy wielkosc tablicy.
srand(time(NULL)); // Pseudolosowe wypelnienie tablicy.
tablica = new int [n]; // Dynaminczne utworzenie tablicy.
for (int i=0; i<n; i++)
{
tablica [i] = rand()%10; // Okreslamy przedzial losowosci liczb od 0-9.
cout << " Tabblica " << i+1 << ": " << tablica [i] << endl;
}
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
// Jezeli poprzedni element jest wiekszy od J-tego to zamieniamy i ustawiamy w kolejnosci rosnacej.
if (tablica[j] > tablica[j+1])
swap(tablica[j], tablica[j+1]);
}
}
cout << " \n Liczby posortowane: ";
for (int i=0; i<n; i++)
//Wypisanie liczb posorotwanych.
cout << tablica [i] << " ";
cout << '\n';
delete [] tablica;
// Zamkniecie dynamicznej tablicy.
return 0;
}