Cod sursa(job #1024419)

Utilizator dan.ghitaDan Ghita dan.ghita Data 8 noiembrie 2013 18:06:52
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("algsort.in");
ofstream g ("algsort.out");
int n, mx, m, c=1;
int v[500001], a[500001], fr[10];
void count()
{
    int a[500001];
    for(int i=0;i<10;++i)
        fr[i]=0;
    for(int i=1;i<=n;++i)
        fr[(v[i]/c)%10]++;
    for(int i=1;i<10;++i)
        fr[i]=fr[i]+fr[i-1];
    for(int i=n;i>0;--i)
    {
        a[fr[(v[i]/c)%10]]=v[i];
        fr[(v[i]/c)%10]--;
    }
    for(int i=1;i<=n;++i)
        v[i]=a[i];
}
void radix()
{
        for (int i=1;i<=n;++i)
        m=max(m, v[i]);

    while(m/c){
    for(int i=0;i<10;++i)
        fr[i]=0;
    for(int i=1;i<=n;++i)
        fr[(v[i]/c)%10]++;
    for(int i=1;i<10;++i)
        fr[i]=fr[i]+fr[i-1];
    for(int i=n;i>0;--i)
    {
        a[fr[(v[i]/c)%10]]=v[i];
        fr[(v[i]/c)%10]--;
    }
    for(int i=1;i<=n;++i)
        v[i]=a[i];
    c*=10;
    }


}

int main()
{
   f>>n;
   int i;
   for (i=1;i<=n;++i) f>>v[i];
   radix();
   for(i=1;i<=n;++i)
    g<<v[i]<<" ", cout<<v[i]<<" ";
   g.close();
   return 0;
}