Sortowanie przez zliczanie

0

Witam

Mam do zrobienia program, który sortowałby liczby przez zliczanie i ma on sam losować te liczby. Problem w tym, że działa dobrze do momentu, gdy ma wypisać je posortowane, bo w ogóle nic nie wypisuje. Może wy mi podpowiecie gdzie muszę to poprawić, by działało jak trzeba?

#include <iostream>
#include <conio.h>
using namespace std;
void Sortuj(int tab[], int wynik[],int pomoc[],int n, int max)
{
	for(int i=0;i<max;i++)
		pomoc[i]=0;
	for(int i=0;i<n;i++)
		pomoc[tab[i]]++;
	for(int i=1;i<max;i++)
		pomoc[i]+=pomoc[i-1];
		srand(time(0));
	for(int i=n-1;i>=0;i--)
	{
            tab[i] = rand() % max;
		wynik[pomoc[tab[i]]-1]=tab[i];
		pomoc[tab[i]]--;
	}
}
int main()
{
	cout<<"Ile liczb: ";
	int n;
	cin>>n;
	cout<<"Podaj max wartosc: ";
		int max;
	cin>>max;
	max++;
	cout<<"Podaj liczby: ";
	int *tab=new int[n], *wynik=new int[n],*pomoc=new int[max];
	srand(time(0));
    for(int i=0;i<n;i++)
    tab[i] = rand() % max;
	Sortuj(tab,wynik,pomoc,n,max);
	for(int i=0;i<n;i++)
		cout<<wynik[i]<<" ";
	getch();
	system("PAUSE");
	return 0;
}
0

Podwójny post, ale konieczny.

Teraz zauważyłem, że to czego nie wypisuje, to liczby w losowej kolejności, tylko od razu, bez ich wypisywania, je sortuje. Problem jest wiec bardziej taki, że chciałbym wypisać liczby przed posortowaniem.

0

Masz tutaj cały kod funkcji która poprawnie sortuje liczby całkowite tym algorytmem. Nie mam zbytnio czasu żeby porównywać twój kod i szukać błędów, dlatego przejrzyj mój i popraw swój jeśli znajdziesz problem. Proszę tylko o nie kopiowanie wszystkiego żywcem.

void zamien(int *tablica, int index1, int index2)
{
     int pomoc;
     pomoc = tablica[index1];
     tablica[index1] = tablica[index2];
     tablica[index2] = pomoc;
}

void sortowanieZliczeniowe(int* tablica, int rozmiar)
{
     int min = tablica[0];
     int max = tablica[0];
     int * wartosci = NULL;
     int j;

     for(int i = 1; i < rozmiar; i++)
     {
         if(min > tablica[i])
         {
             min = tablica[i];
         }
         if(max < tablica[i])
         {
             max = tablica[i];
         }
     }

     wartosci = new int[max - min + 1];
     for(int i = min; i <= max; i++)
     {
         wartosci[i - min] = 0;
     }
     for(int i = 0; i < rozmiar; i++)
     {
         wartosci[tablica[i] - min]++;
     }

     j = 0;
     for(int i = min; i <= max; i++)
     {
         while(wartosci[i - min] > 0)
         {
             tablica[j] = i;
             j++;
             wartosci[i - min]--;
         }
     }

     delete [] wartosci;
     wartosci = NULL;
} 

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