Cod sursa(job #1800557)

Utilizator cosminmaneaCosmin Manea cosminmanea Data 7 noiembrie 2016 21:26:23
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <cstring>
int n;
int v[10000100],v1[10000100],nrap[257];
FILE *g=fopen("radixsort.out","w");

void afish()
{
    for(int i=1; i<=n; i+=10)
        fprintf(g,"%d ",v[i]);
}

int main()
{
    int a,b,c;
    FILE *f=fopen("radixsort.in","r");
    fscanf(f,"%d%d%d%d",&n,&a,&b,&c);
    v[1]=b;
    for(int i=2; i<=n; i++)
        v[i] = ((long long)a*v[i-1] + b) % c;
    int step,i;
    for(step=0; step<=24; step+=8)
    {
        //fac un vector de numarare in care nrap[k]=kte dintre valorile
        //din shir se termina in k-1. Pt. ca lucram pe octetzi,
        //<=> valoarea ultimului octet sa fie k-1
        memset(nrap,0,sizeof(nrap));
        for(i=1; i<=n; ++i)
                ++nrap[((v[i]>>step)&0xff)+1];
        nrap[0]=1;
        for(i=1;i<=256;++i)
            nrap[i]+=nrap[i-1];
        for(i=1; i<=n; ++i)
          {
              v1[nrap[(v[i]>>step)&0xff]]=v[i];
              nrap[(v[i]>>step)&0xff]++;
          }
        for(i=1;i<=n;i++)v[i]=v1[i];
    }
    afish();
    return 0;
}