Cod sursa(job #1259271)

Utilizator alexandru.ghergutAlexandru-Gabriel Ghergut alexandru.ghergut Data 9 noiembrie 2014 21:25:35
Problema Radix Sort Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <math.h>
using namespace std;

void radixSort(int a[], int N, int currentDigit);

int main()
{
    int N, A, B, C;
    ifstream f("radixsort.in");
    f >> N >> A >> B >> C;
    f.close();

    int a[N], i;
    int maxDigits = 0, digits;
    a[0] = B;
    for (i = 1; i < N; i++)
    {
        a[i] = (A * a[i - 1] + B) % C;
        digits = log10(a[i]) + 1;
        if (digits > maxDigits)
            maxDigits = digits;
    }

    for (i = 1; i <= maxDigits; i++)
        radixSort(a, N, i);

    ofstream g("radixsort.out");
    for (i = 0; i < N; i += 10)
        g << a[i] << " ";
    g.close();

    return 0;
}

void radixSort(int a[], int N, int currentDigit)
{
    int i, j;
    int count[10] = {};
    int output[N];

    int zeroes = 1;
    for (i = 1; i < currentDigit; i++)
        zeroes *= 10;
    for (i = 0; i < N; i++)
       count[(a[i] / zeroes) % 10]++;

    for (j = 1; j <= 9; j++)
        count[j] += count[j - 1];

    int digit;
    for (i = N - 1; i >= 0; i--)
    {
        digit = (a[i] / zeroes) % 10;
        output[count[digit] - 1] = a[i];
        count[digit]--;
    }

    for (i = 0; i < N; i++)
        a[i] = output[i];
}