Nadesłany przez Krzysztof Sośnierz, 11 marca 2011 13:35
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
bubble_2_c.cpp:
//Sortowanie babelkowe //www.algorytm.org #include <iostream> // Wymagane dla time() pod MSVC #include <ctime> // Funkcja zamienia wartosci obiektow a i b, // identyczna implementacje mozna znalesc w <algorithm> template<typename T> inline void swap(T& a, T& b) { // c przechowuje tymczasowo wartosc obiektu a T c(a); a = b; b = c; } // Funkcja sortuje tablice wskazana przez array o rozmiarze size, // ta implementacji nie jest optymalna dla posortowanych juz tablic, jej // zlozonosc zawsze bedzie O(N^2), nie chcialem duplikowac implementacji // zawartych w serwisie dlatego przedstawiam alternatywna metode. template<typename T> void bubbleSort(T* array, size_t size) { // Jezeli rozmiar tablicy rowny jest zero to zakoncz funkcje if (size == 0) return ; for (size_t i = 0; i < size - 1; ++i) for (size_t j = size - 1; j > i; --j) if (array[j - 1] > array[j]) // Zamien wartosci elementow jezeli lewy wiekszy od prawego swap(array[j - 1], array[j]); } // Funkcja wyswietla tablice wskazna przez array o rozmiarze size template<typename T> void printArray(const T* array, size_t size) { // Dla kazdego elementu tablicy for (size_t i = 0; i < size; ++i) { // Wyswietl element i, gdy indeks elementu + 1 dzieli sie // bez reszty przez 10, wstaw znak nowego wiersza, // w przeciwnym wypadku wstaw znak tabulacji. std::cout << array[i] << ((i + 1) % 10 == 0 ? "\n" : "\t"); } // Nowy wiersz std::cout << std::endl; } int main() { // Stala wielkosc tablicy const int size = 100; // Tablica liczb calkowitych int int_array[size]; // Inicjalizacja ziarna generatora liczb pseudo-losowych srand(time(0)); // Losowa inicjalizacja tablicy for (size_t i = 0; i < size; ++i) { // Wartosc losowa z przedzialu od 0 do 99 int_array[i] = rand() % 100; } // Wyswietl tablice przed posortowaniem printArray(int_array, size); // Posortuj tablice bubbleSort(int_array, size); // Wyswietl tablice po posortowaniu printArray(int_array, size); // Czekaj na "enter" std::cin.get(); // Poprawne zakonczenie programu return EXIT_SUCCESS; }