Cod sursa(job #1222232)

Utilizator cojocarugabiReality cojocarugabi Data 22 august 2014 17:29:56
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
/* sortare binara cu memorie n si
   complexitate O(k*n) unde k reprezinta
   numarul de biti pe care lucram*/
# include <fstream>
# include <cstring>
# include <iostream>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int nmax=500005;
const int nr_maxim_de_biti=31;
int a[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];
    memcpy(a,s,sizeof(s));
    k[0]=p-1;k[1]=u+1;
    bool c;
    for (int i=p;i<=u;++i)
    {
        c=(s[i] & m);
        if (c) --k[c];else ++k[c];
        a[k[c]]=s[i];
    }
    memcpy(s,a,sizeof(s));
    sort(p,k[0],b-1);
    sort(k[1],u,b-1);
}
int main(void)
{
    int n=read();
    for (int i=1;i<=n;++i) s[i]=read();
    sort(1,n,nr_maxim_de_biti);
    for (int i=1;i<=n;++i) fo<<s[i]<<" ";
    fo.close();
    return 0;
}