Cod sursa(job #1222166)

Utilizator cojocarugabiReality cojocarugabi Data 22 august 2014 13:24:05
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
/* sortare binara cu memorie 2*n si
   complexitate O(k*n) unde k reprezinta
   numarul de biti pe care lucram*/
# include <fstream>
# include <cstring>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int nmax=500005;
int a[2][nmax];
int s[nmax];
int read()
{
    char c[30];
    fi>>c;
    int k=strlen(c),p=0;
    for (int i=0;i<k;++i) p=p*10+c[i]-'0';
    return p;
}
void sort(int p,int u,int b)
{
    if (b<0 || p>=u) return;
    int m=1<<b,k[2];
    k[0]=k[1]=0;
    bool c;
    for (int i=p;i<=u;++i)
    {
        c=(s[i] & m);
        ++k[c];
        a[c][k[c]]=s[i];
    }
    int w=p-1;
    for (int i=0;i<2;++i)
        for (int j=1;j<=k[i];++j) s[++w]=a[i][j];
    sort(p,p+k[0]-1,b-1);
    sort(u-k[1]+1,u,b-1);
}
int main(void)
{
    int n=read();
    for (int i=1;i<=n;++i) s[i]=read();
    sort(1,n,31);
    for (int i=1;i<=n;++i) fo<<s[i]<<" ";
    fo.close();
    return 0;
}