Kod: Zaznacz cały
// Sortowanie babelkowe
#include <iostream>
using namespace std;
void babelki(int tablica[100], int n);
int pobranie_danych(int &n, int tablica[100]);
// n przesylamy do funkcji przez referencje, bo chcemy pracowac na oryginalnej zmiennej w funkcji a nie jej kopii,
// tablica z definicji jest przesylana przez referencje
int main()
{
int n,tablica[100]={0};
if(pobranie_danych(n, tablica)) // jezeli wlasciwe dane(n>0)
babelki(tablica, n); // to wywolujemy wlasciwa funkcje
return 0;
}
//*****************************************************************************
void babelki(int tablica[100], int n)
{
int temp, counter=1, liczba_zamian=0, ilosc_przejsc=0;
while(counter) // dopoki wystepuje co najmnniej jedna zamiana 2 elementow w tablicy
{
counter=0; // zerujemy licznik zamian w jednym przejsciu tablicy
for(int j=0; j<n-1; j++) // wlasciwa petla, do n-1 bo statniego elementu nie musimy sprawdzac
{
if(tablica[j]>tablica[j+1]) // warunek zamiany
{
temp=tablica[j+1]; //
tablica[j+1]=tablica[j]; // zamiana
tablica[j]=temp; //
counter++; // wewnetrzny licznik ilosci zamian w jednym przejsciu tablicy
}
}
if(!ilosc_przejsc) cout << endl; // kosmetyczne
cout << "Przejscie nr " << ilosc_przejsc+1 << ": [";
for(int k=0; k<n; k++)
{
cout << tablica[k]; // drukujemy czastkowe wyniki sortowania po kazdym kolejnym przejsciu
if(k<n-1) cout << ", "; // kosmetyczne, usuwamy przecinek po ostatnim elemencie
}
cout << "]" << endl;
liczba_zamian=liczba_zamian+counter; // laczna liczba zamian
ilosc_przejsc++; // liczba przejsc tablicy
}
cout << endl << "Posortowana tablica: " << endl << " [";
for(int k=0; k<n; k++)
{
cout << tablica[k]; // drukowanie posortowanej tablicy
if(k<n-1) cout << ", ";
}
cout << "]" << endl << endl << "Ilosc zamian liczb: " << liczba_zamian << endl;
cout << "Ilosc przejsc przez tablice: " << ilosc_przejsc << endl;
}
//*****************************************************************************
int pobranie_danych(int &n, int tablica[100])
{
cout << "Podaj liczbe wyrazow n: ";
cin >> n;
if(n<=0)
{
cout << "Zla liczba wyrazow!" << endl;
return 0; // zwracamy 0 czyli sortowanie sie nie odbedzie
}
for(int i=0; i<n; i++) // petla do podawania elementow
{
cout << "Podaj element nr " << i+1 << ": ";
cin >> tablica[i];
}
return 1; // zwracamy 1 i mozemy sortowac
}