Cod sursa(job #2298094)

Utilizator aditzu7Adrian Capraru aditzu7 Data 7 decembrie 2018 12:20:27
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#define nmax 10001001
using namespace std;
int a,b,c,i,n,v[nmax];
int detmax(int n,int v[]){
int i,mmax=v[1];
for(i=2;i<=n;i++) if(v[i]>mmax) mmax=v[i];
return mmax;
}
void sorta(int n,int v[],int exp){
int sol[n+1],i,cnt[10]={0};
for(i=1;i<=n;i++) cnt[(v[i]/exp)%10]++;
for(i=1;i<10;i++) cnt[i]+=cnt[i-1];
for(i=n;i>=1;i--){
   sol[cnt[(v[i]/exp)%10]]=v[i];
   cnt[(v[i]/exp)%10]--;

}
for(i=1;i<=n;i++) v[i]=sol[i];

}
void rsort(int n,int v[]){
int exp,mmax;
mmax=detmax(n,v);
for(exp=1;mmax/exp>0;exp*=10)
    sorta(n,v,exp);

}
int main()
{freopen("radixsort.in","r",stdin);
 freopen("radixsort.out","w",stdout);
 scanf("%d%d%d%d",&n,&a,&b,&c);
v[1]=b;
for(i=2;i<=n;i++) v[i]=(a*v[i-1]+b)%c;

rsort(n,v);

for(i=1;i<=n;i+=10) printf("%d ",v[i]);

     return 0;
}