Cod sursa(job #1793353)

Utilizator doruliqueDoru MODRISAN dorulique Data 30 octombrie 2016 22:35:17
Problema Radix Sort Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>

int n,A,B,C,a[10000001],b[10000001],nr[256];

int main()
{
    FILE *f=fopen("radixsort.in","r");
    fscanf(f,"%d%d%d%d",&n,&A,&B,&C);
    int i;
    a[1]=B;
    for(i=2;i<=n;i++)
        a[i]=((long long)A*a[i-1]+B)%C;
    int poz;
    for(poz=0;poz<=24;poz+=8)//poz=nr. de ordine al byte-ului 0=ultimul
    {
        for(i=0;i<=255;i++)nr[i]=0;
        for(i=1;i<=n;i++)//numar in nr[x] = cite numere au byte-ul poz egal cu x+1
            nr[((a[i] >> poz)&0xff)+1]++;
        nr[0]=1;
        for(i=0;i<=255;i++)nr[i+1]+=nr[i];
        for(i=1;i<=n;i++)
            b[nr[(a[i]>>poz)&0xff]++]=a[i];//adica fix ceea ce fac aici
        for(i=1;i<=n;i++)//so, in vectorul b le avem grupate pe seturi
            a[i]=b[i];//dupa valoarea cifrei de pe pozitzia poz
    }
    f=fopen("radixsort.out","w");
    for(i=1;i<=n;i+=10)
        fprintf(f,"%d ",a[i]);
    fprintf(f,"\n");
    return 0;
}