Cod sursa(job #2271320)

Utilizator cameliapatileaPatilea Catalina Camelia cameliapatilea Data 28 octombrie 2018 13:30:03
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include<fstream>
#include<iostream>
using namespace std;

ifstream f("radixsort.in");
ofstream g("radixsort.out");
int i,n,a,b,c,v[10000007],x,y,j,aux;
int gasestemaxi(int v[], int n)
{
    int maxi=v[1];
    //caut in vector valoarea cea mai mare pentru a afla nr maxim de cifre pe care le are un numar
    for(i=2; i<=n; i++)
        if(v[i]>maxi)
            maxi=v[i];
    //returnez valoarea maxima
    return maxi;
}
//creez un subprogram sortare cu 3 parametri pentru a sorta de fiecare data vectorul care memoreaza numerele care se termina cu
//cifrele de la 0 la 9
void sortare(int v[], int n, int exponent)
{
    int vectorfinal[n+5]; //vectorul care imi va returna la final numerele sortate
    int i;
    int cifre[10]= {0}; // initilizez vectorul de cifre cu 0 pe toate cele 10 pozitii
    for(i=1; i<=n; i++)
        cifre[(v[i]/exponent)%10]++; //cresc pozitia
    for(i=1; i<=9; i++)
        cifre[i]+=cifre[i-1];
    for(i=n; i>=1; i--)
    {
        vectorfinal[cifre[(v[i]/exponent)%10]]=v[i];
        cifre[(v[i]/exponent)%10]--;
    }
    for(i=1; i<=n; i++)
        //suprascriu in vectorul meu initial rezultatul vectorului final
        v[i]=vectorfinal[i];


}
void radixsort(int v[], int n)
{
    int m, exponent;
    m=gasestemaxi(v,n);
    for(exponent=1; m/exponent>0; exponent=exponent*10)
        sortare(v,n,exponent);

}
int main()
{
    f>>n>>a>>b>>c;

    v[1]=b;
    for(i=2; i<=n; i++)
        v[i]=(a*v[i-1]+b)%c;
    radixsort(v,n);
    for(i=1; i<=n; i++)
        if(i%10==1)
            g<<v[i]<<" ";
    return 0;


}