Cod sursa(job #1004955)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 3 octombrie 2013 20:57:44
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>
#include <vector>
#define N 500005
using namespace std;
vector <int> b[10];
vector <int>::iterator it;
int n,a[N],maxa;
inline int max(int x,int y){ if(x>y)return x; else return y; return 0; }
void read() { freopen("algsort.in","r",stdin); scanf("%d\n",&n); for(int i=1;i<=n;++i){ scanf("%d ",&a[i]); maxa=max(maxa,a[i]); } fclose(stdin); }
void write(){ freopen("algsort.out","w",stdout); for(int i=1;i<=n;++i)printf("%d ",a[i]); fclose(stdout); }
void lsd_radixsort()
{
int exp=1,k,i;
while(maxa>=exp)
    {
    for(i=1;i<=n;++i)b[a[i]/exp%10].push_back(a[i]);
    k=0;
    for(i=0;i<10;++i)
        {
        for(it=b[i].begin();it!=b[i].end();++it)
            a[++k]=*it;
        b[i].clear();
        }
    exp*=10;
    }
}
int main()
{
read();
lsd_radixsort();
write();
return 0;
}