Cod sursa(job #1318222)

Utilizator alexandru.ghergutAlexandru-Gabriel Ghergut alexandru.ghergut Data 15 ianuarie 2015 19:18:38
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <math.h>
using namespace std;

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

int main()
{
    int N;
    ifstream f("algsort.in");
    f >> N;
    int a[N];
    int maxDigits = 0, digits, i;
    for (i = 0; i < N; i++)
    {
        f >> a[i];
        digits = log10(a[i]) + 1;
        if (digits > maxDigits)
            maxDigits = digits;
    }
    f.close();

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

    ofstream g("algsort.out");
    for (i = 0; i < N; i++)
        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];
}