Cod sursa(job #1786269)

Utilizator crazylamaRiclea Andrei crazylama Data 22 octombrie 2016 17:46:25
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <queue>
#include <cstdlib>

using namespace std;

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

queue<unsigned int> q[10];

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