15 kwietnia 2005 20:11
Sortowanie b±belkowe
Paweł Gniadkowski [Kardon ] Algorytm sortowania b±belkowego jest bardzo prosty. Polega on na porównywaniu ze sob± par liczb oraz w razie potrzeby ich zamienianiu.
Przykładowo:
sortujemy liczby: 12 5 19 2 4
1 krok >> porównujemy parę 12 5 >> zamieniamy miejscami
1 krok >> otrzymujemy: 5 12 19 2 4
2 krok >> porównujemy parę 12 19 >> nie zamieniamy
2 krok >> otrzymujemy: 5 12 19 2 4
3 krok >> porównujemy parę 19 2 >> zamieniamy miejscami
3 krok >> otrzymujemy: 5 12 2 19 4
4 krok >> porównujemy parę 19 4 >> zamieniamy miejscami
4 krok >> otrzymujemy: 5 12 2 4 19
5 krok >> ZACZYNAMY OD POCZˇTKU (bo dokonali¶my 3 zamiany)
5 krok >> porównujemy parę 5 12 >> nie zamieniamy
5 krok >> otrzymujemy: 5 12 2 4 19
6 krok >> porównujemy parę 12 2 >> zamieniamy miejscami
6 krok >> otrzymujemy: 5 2 12 4 19
7 krok >> porównujemy parę 12 4 >> zamieniamy miejscami
7 krok >> otrzymujemy: 5 2 4 12 19
8 krok >> porównujemy parę 12 19 >> nie zamieniamy
8 krok >> otrzymujemy: 5 2 4 12 19
9 krok >> ZACZYNAMY OD POCZˇTKU (bo dokonali¶my 2 zamian)
9 krok >> porównujemy parę 5 2 >> zamieniamy miejscami
9 krok >> otrzymujemy: 2 5 4 12 19
10 krok >> porównujemy parę 5 4 >> zamieniamy miejscami
10 krok >> otrzymujemy: 2 4 5 12 19
11 krok >> porównujemy parę 5 12 >> nie zamieniamy
11 krok >> otrzymujemy: 2 4 5 12 19
12 krok >> porównujemy parę 12 19 >> nie zamieniamy
12 krok >> otrzymujemy: 2 4 5 12 19
13 krok >> ZACZYNAMY OD POCZˇTKU (bo dokonali¶my 2 zamian)
13 krok >> porównujemy parę 2 4 >> nie zamieniamy
13 krok >> otrzymujemy: 2 4 5 12 19
14 krok >> porównujemy parę 4 5 >> nie zamieniamy
14 krok >> otrzymujemy: 2 4 5 12 19
15 krok >> porównujemy parę 5 12 >> nie zamieniamy
15 krok >> otrzymujemy: 2 4 5 12 19
16 krok >> porównujemy parę 12 19 >> nie zamieniamy
16 krok >> otrzymujemy: 2 4 5 12 19
17 krok >> KONIEC ALGORYTMU (bo nie musieli¶my dokonywać zamian)
Musieli¶my dokonać 4 pełnych przej¶ć. Za każdym razem porównywali¶my kolejne pary liczb ze sob±. W ostatnim przej¶ciu (4) nie dokonali¶my żadnej zamiany, a więc tablica była już posortowana.
Algorytm w C++ wygl±da następuj±co:
#include <iostream>
using namespace std;
// procedura sortujaca tablice
void bubble(int *tabl, int n, bool *zmiana)
{
int temp;
for (int i=0;i<n-1;i++)
{
if (tabl[i]>tabl[i+1])
{
temp = tabl[i];
tabl[i] = tabl[i+1];
tabl[i+1] = temp;
*zmiana=true;
}
}
}
int main()
{
int n;
bool zmiana;
cout << "Ile liczb mam posortowac?\n";
cin >> n;
int tabl[n];
// pobieranie danych:
for (int i=0;i<n;i++)
{
cout << "\nPodaj " << i+1 << " liczbe: ";
cin >> tabl[i];
}
cout << "\n\n";
// glowna petla sortujaca
do
{
zmiana = false;
bubble(tabl,n,&zmiana);
}
while (zmiana==true);
// wypisywanie danych
for (int i=0;i<n;i++)
{
cout << tabl[i] << " ";
}
}