Cod sursa(job #1528454)

Utilizator ZimmyZimmermann Erich Zimmy Data 19 noiembrie 2015 18:31:32
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <vector>
#define N 10000010
#define Int (long long)
using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
long long a,b,c,x;
int n,i,cnt[256];
int s[N],S[N],*v,*V,*aux;
int main()
{
    f>>n>>a>>b>>c;
    x=b;v=s;V=S;
    for(i=1;i<=n;i++)
    {
        v[i]=(int)x;
        x=((a*x)%c+b)%c;
    }
    for(int step=1;step<=4;step++)
    {
        //numar cate elemente contine fiecare buchet;
        for(i=1;i<=n;i++)
            cnt[v[i]&255]++;
        //determin la ce indice se termina fiecare buchet
        for(i=1;i<=255;i++)cnt[i]+=cnt[i-1];
        //asez elemetele in buchete
        for(i=n;i>=1;i--)
        {
            a=v[i]&255;
            b=v[i]>>8;
            V[cnt[a]]=b|(a<<24);
            cnt[a]--;
        }
        //cutarare cnt (analog cu
        for(i=0;i<=255;i++)cnt[i]=0;
        //schimb pointare pe vectorul nou
        aux=V;V=v;v=aux;
    }
    for(i=1;i<=n;i+=10)
        g<<v[i]<<' ';
    return 0;
}