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
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.