Cod sursa(job #1369482)

Utilizator firutibogdanFiruti Bogdan-Cristian firutibogdan Data 3 martie 2015 08:50:36
Problema Radix Sort Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<fstream>
#include<stdlib.h>
using namespace std;
struct coada
{
    int x;
    coada *leg;
};
coada *PR[10],*UL[10],*q;
void next(int i,int a,int b,int c,int v[])
{
    v[i]=(a*v[i-1]+b)%c;
}
int cmp (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
int n,a,j,b,c,aux,i,v[10000002],cif,k;
long long p;
int main()
{
     ifstream fin("radixsort.in");
    ofstream fout("radixsort.out");
    fin>>n>>a>>b>>c;
    v[1]=b;
    for(i=2;i<=n;i++)
    {
        next(i,a,b,c,v);
    }
   // qsort(v+1,n,sizeof(int),cmp);
    p=1;
    for(i=1;i<11;i++)
    {
        for(j=1;j<=n;j++)
        {
            cif=v[j]/p%10;
            q=new coada;
            q->x=v[j];
            q->leg=0;
            if(PR[cif]==0)
            {
                PR[cif]=q;
                UL[cif]=q;
            }
            else
            {
                UL[cif]->leg=q;
                UL[cif]=q;
            }
        }
        j=0;
        for(k=0;k<=9;k++)
        {
            while(PR[k]!=0)
            {
                q=PR[k];
                j++;
                v[j]=q->x;
                PR[k]=PR[k]->leg;
                delete q;
            }
            UL[k]=0;
        }
        p=p*10;
    }
    for(i=1;i<=n;i=i+10)
    {
        fout<<v[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}