Cod sursa(job #1080883)

Utilizator mads2194FMI - Andrei Stroe mads2194 Data 12 ianuarie 2014 22:53:10
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <queue>

#define N 500000

using namespace std;

unsigned int n;
long long int v[N];

queue <long long int> q[10];

void lsd()
{
    long long int k=1;
    bool run=1;

    unsigned int i;
    int x,pos;
    while(run)
    {
        run=0;

        i=0;
        pos=0;
        while(i<n)
        {
            x=v[i++];
            int t = (x/k)%10;
            if(t>0) q[ t ].push(x);
            else v[pos++] = x;
        }
        k*=10;

        for(i=1;i<10;++i)
        {
            while(!q[i].empty())
            {
                v[pos++]=q[i].front();
                q[i].pop();
                //if(i>0)
                run=1;
            }
        }
    }
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    scanf("%d",&n);

    for(size_t i=0;i<n;++i)
        scanf("%d",&v[i]);

    lsd();

    for(size_t i=0;i<n;++i)
        printf("%d ",v[i]);

    return 0;
}