Cod sursa(job #330754)

Utilizator freak93Adrian Budau freak93 Data 11 iulie 2009 14:40:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
#include<cstring>
#define maxn 500005

using namespace std;

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

int a[maxn],b[maxn],n,i;

void rad(int *a,int *b,int n,int byte)
{
    int i,count[2048],ind[2048];
    memset(count,0,sizeof(count));
    for(i=1;i<=n;++i)
        ++count[(a[i]>>byte)&2047];
    ind[0]=1;
    for(i=1;i<2048;++i)
        ind[i]=ind[i-1]+count[i-1];
    count[0]=1;
    for(i=1;i<=n;++i)
        b[ind[(a[i]>>byte)&2047]++]=a[i];
}


void radix(int *a,int n)
{
    rad(a,b,n,0);
    rad(b,a,n,11);
    rad(a,b,n,22);
}

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