Pagini recente » Cod sursa (job #2338319) | Cod sursa (job #1342144) | Cod sursa (job #1236530) | Cod sursa (job #581631) | Cod sursa (job #2515579)
#include <fstream>
using namespace std;
ifstream in("radixsort.in");
ofstream out("radixsort.out");
void Vec(unsigned int V[],unsigned int A,unsigned int B,
unsigned int C,unsigned int N)
{
V[0]=B;
for(int i=1;i<N;++i)
V[i]=(A*V[i-1]+B)%C;
}
unsigned int Max(unsigned int V[],unsigned N)
{
int max1=V[0];
for(int i=1;i<N;++i)
if(V[i]>max1)
max1=V[i];
return max1;
}
void countSort(unsigned int V[],unsigned int N,unsigned int exp)
{
int output[N];
int i,counT[10]={0};
for(i=0;i<N;++i)
counT[(V[i]/exp)%10]++;
for(i=1;i<10;++i)
counT[i]+=counT[i-1];
for(i=N-1;i>=0;--i)
{
output[counT[(V[i]/exp)%10]-1]=V[i];
counT[(V[i]/exp)%10]--;
}
for(i=0;i<N;++i)
V[i]=output[i];
}
void Radix(unsigned int V[],unsigned int N)
{
int m=Max(V,N);
for(int exp=1;m/exp>0;exp*=10)
countSort(V,N,exp);
}
int main()
{
unsigned int N,A,B,C;
in>>N>>A>>B>>C;
unsigned int V[N];
Vec(V,A,B,C,N);
Radix(V,N);
for(int i=0;i<N;i+=10)
out<<V[i]<<" ";
return 0;
}