Problem z zapisaniem algorytmu sortowania kubełkowego

0

Witam.
Próbowałem zapisać algorytm sortowania kubełkowego według tej strony: http://edu.i-lo.tarnow.pl/inf/alg/003_sort/0020.php w C++. Program kompiluje się, ale niestety nie działa tak, jak powinien. Oto kod: http://4programmers.net/Pastebin/1489. Po wpisaniu liczb 3,5,3,5,3 na standardowym wyjściu non-stop wypisuje się liczba 4199473.
Z góry dziękuję za pomoc.

0

Dzięki Oak. Ten błąd w przedziale to dlatego, że na początku był przedział 1-20, a później zmieniłem na 1-5, żeby nie wpisywać tak dużo liczb i jak widać nie poprawiłem tego przedziału w całym programie, bo nie zauważyłem. Tak czy siak, to już poprawione, a reszta jutro, bo pora iść spać.

0

Kod niestety jest napisany dość słabo i wszystko jest 'na kupie'. Poprawiłem błędy:

#include <iostream>

using namespace std;

int main()
{
    int min = 1,                // Minimalna wartość podana przez użytkownika
        max = 5,                // Maksymalna wartość podana przez użytkownika
        rozmiar = max-min+1,    // Rozmiar.
        licznik[rozmiar],       // Licznik wystąpień dla każdej wartość w sortowanym zbiorze
        wartosci[rozmiar];      // Tablica, do której zapisuję liczby podawane przez użytkownika
    
    for(int i = 0; i < rozmiar; ++i)
        licznik[i] = 0;         // Ustawienie wszystkich liczników na zero
    
    cout << "Wpisz 5 liczb z zakresu od 1 do 5\n";
    
    for(int i = 0; i < rozmiar; ++i)
    {
        while (1) {
            cin >> wartosci[i];
            
            if (wartosci[i] < min)
                cout << "Minimalna wartosc to "<<min<<"! Jeszcze raz.\n";
            else if (wartosci[i] > max)
                cout << "Maksymalna wartosc to "<<max<<"! Jeszcze raz.\n";
            else
                break;
        }
        // Skoro min <= wartosci[i], to 0 <= wartosci[i]-min.
        // Podobnie, watosci[i] < max+1, czyli
        // wartosci[i]-min < max-min+1 = rozmiar - zatem OK.
        ++licznik[wartosci[i]-min]; // Zwiększenie wartości licznika wystąpień wartości o indeksie "i" o 1
    }
    cout << endl;               // Odstęp
    for(int i = 0; i < rozmiar; ++i)
        for(int x = 0; x < licznik[i]; ++x)
//!         cout << wartosci[i] << endl;    // Wypisanie posortowanych liczb na ekran
//!         Linijka wyżej nie zadziała, gdyż tablica wartosci w ogóle
//!         nie została posortowana! Możemy uratować sytuację pisząc:
            cout << i+min << endl;
            
    return 0;
}
0

Dzięki wielkie za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1