algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sortowanie bąbelkowe (bubblesort) - Implementacja w C/C++
Ocena użytkownikóww: *****  / 9
SłabyŚwietny
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;
}
Dodaj komentarz