Cod sursa(job #1786137)

Utilizator crazylamaRiclea Andrei crazylama Data 22 octombrie 2016 14:32:40
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <queue>
#include <cstdlib>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

queue<int> q[10];

int putere_10(int n)
{
    if (n == 0)
        return 1;
    if (n % 2 == 0)
        return putere_10(n / 2) * putere_10(n / 2);
    else
        return putere_10(n - 1) * 10;
}

int main()
{
    int n, *v, maxim = 0;
    f >> n;
    v = (int*)calloc(n + 1, sizeof(int));
    for (int i = 0; i < n; ++i)
    {
        f >> v[i];
        int aux = v[i], nr = 0;
        while (aux)
        {
            ++nr;
            aux /= 10;
        }
        if (nr > maxim)
            maxim = nr;
    }
    for (int i = 1; i <= maxim; ++i)
    {
        int k = putere_10(i);
        for (int j = 0; j < n; ++j)
            q[v[j] % k / (k / 10)].push(v[j]);
        k = 0;
        for (int j = 0; j < 10; ++j)
        {
            while (!q[j].empty())
            {
                v[k++] = q[j].front();
                q[j].pop();
            }
        }
    }
    for (int i = 0; i < n; ++i)
        g << v[i] << " ";
    return 0;
}