Cod sursa(job #1731804)

Utilizator codebreaker24Tivadar Ionut codebreaker24 Data 19 iulie 2016 23:01:37
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>

using namespace std;
const int nmax = 10000001;
int a[nmax];
int temp[nmax];
int *ap = a, *tempp = temp, *aux;
int counts[10000];
int n;
int A,B,C;

void counting(int digit);
void radixSort();

int main()
{
    ifstream fin("radixsort.in");
    ofstream fout("radixsort.out");
     ap = a;
     tempp = tempp;
    fin >> n;
    fin >> A >> B >> C;
    a[0] = B%C;
    for(int i=1; i<n; i++)
    {
       a[i] = (1LL * A * a[i-1] % C + B) % C;

    }
    radixSort();

    for(int i=0; i<n; i+=10)
    {

        fout << ap[i] << " ";
    }

    fin.close();
    fout.close();



    return 0;
}

void radixSort()
{
    int maxNumber = ap[0];
    int i;
    for(i=1 ; i<n; i++)
     if(ap[i] > maxNumber)
     maxNumber = ap[i];

    for(int digit = 1;  maxNumber/digit > 0;  digit*= 10000)
    {



            for(i=0; i<n; i++)
            {
                counts[(ap[i]/digit)%10000]++;

            }

            for(i=1; i<10000; i++)
            {
                counts[i] +=counts[i-1];

            }

            for(i=n-1; i>=0; i--)
            {
                tempp[counts[(ap[i]/digit)%10000]-1] = ap[i];
                counts[(ap[i]/digit)%10000]--;
            }

            for(int i=0;i<10000; i++)
                counts[i] =0;

            aux = ap;
            ap = tempp;
            tempp = aux;



    }



}