Cod sursa(job #2212407)

Utilizator b10nd3Oana Mancu b10nd3 Data 13 iunie 2018 22:33:33
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
 
 
 
 
int n,m,a,b,c;
int v[10000005],x[65600],aux[10000005];
 
 
 
 
int main()
{
    int i,j,c1;
    unsigned long long crt;
    FILE *f,*g;
 
    f=fopen("radixsort.in","r");
    g=fopen("radixsort.out","w");
 
    fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
 
    v[1]=b;
    m=1;
    crt=b;
    for(i=2;i<=n;i++)
    {
        crt=(crt*a+b)%c;
        v[i]=crt;
    }
    c1=1<<16;
 
 
//    for(i=1;i<=n;i++)
  //      printf("%d ",v[i]);
 
 
    for(i=1;i<=n;i++)
         x[v[i]%c1]++;
    for(i=1;i<=c1;i++)
        x[i]+=x[i-1];
    for(i=n;i>=1;i--)
    {
        j=v[i]%c1;
        aux[x[j]]=v[i];
        x[j]--;
    }
 
    for(i=0;i<=c1;i++)
        x[i]=0;
 
    for(i=1;i<=n;i++)
         x[aux[i]/c1]++;
    for(i=1;i<=c1;i++)
        x[i]+=x[i-1];
    for(i=n;i>=1;i--)
    {
        j=aux[i]/c1;
        v[x[j]]=aux[i];
        x[j]--;
    }
 
    for(i=1;i<=n;i+=10)
        fprintf(g,"%d ",v[i]);
 
    fclose(f);
    fclose(g);
}