Cod sursa(job #809473)

Utilizator davidoceaSintamarian David davidocea Data 8 noiembrie 2012 16:15:30
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int freq[11];
int main (){
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int p=10,n,f[500005],v[500005],maxi=0,i,j,e;
    scanf("%d",&n);
    for(i=1;i<=n;++i){
        scanf("%d",&f[i]);
        if(f[i]>maxi){
            maxi=f[i];
        }
    }
    for(p=1;maxi>0;maxi/=10,p*=10){
        for(i=1;i<=n;++i){
            ++freq[(f[i]/p)%10];
        }
        for(i=0,e=0;i<=9;++i){
            if(freq[i]!=0){
                for(j=1;j<=n;++j){
                    if((i==(f[j]/p)%10)&&(freq[i]>0)){
                        v[++e]=f[j];
                        --freq[i];
                    }
                }
            }
        }
        for(i=1;i<=n;++i){
            swap(f[i],v[i]);
        }
    }
    for(i=1;i<=n;++i){
        printf("%d ",f[i]);
    }

}