Cod sursa(job #2151709)

Utilizator radurotaruRotaru Radu Stefan radurotaru Data 4 martie 2018 20:04:45
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream f("radixsort.in");
ofstream g("radixsort.out");
int v[10000001],n,r,t,e;
int maxim(int v[],int n)
{
    int mx=v[0];
    for(int i=1; i<n; i++)
    {
        if(v[i]>mx)
            mx=v[i];
    }
    return mx;
}
void countsort(int v[],int n,int k)
{
    int a[n];
    int i,b[10]= {0};
    for(i=0; i<n; i++)
    {
        b[(v[i]/k)%10]++;
    }
    for(i=1; i<10; i++)
    {
        b[i]=b[i]+b[i-1];
    }
    for(i=n-1; i>=0; i--)
    {
        a[b[(v[i]/k)%10]-1]=v[i];
        b[(v[i]/k)%10]--;
    }
    for(i=0; i<n; i++)
        v[i]=a[i];
}
void radix(int v[],int n)
{
    int q=maxim(v,n);
    for(int k=1; q/k>0; k=k*10)
        countsort(v,n,k);
}
int main()
{
    f>>n>>r>>t>>e;
    for(int i=0; i<n; i++)
    {
        if(i==0)
            v[i]=t%e;
        else
            v[i]=(r*v[i-1]+t)%e;
    }
    radix(v,n);
    for(int i=0; i<n; i=i+10)
        g<<v[i]<<" ";
    return 0;
}