Cod sursa(job #1222085)

Utilizator cojocarugabiReality cojocarugabi Data 22 august 2014 10:51:31
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
# include <fstream>
# include <cstring>
using namespace std;
ifstream fi("algsort.in");
ofstream fo("algsort.out");
const int nmax=500005;
typedef struct node
{
    int x;
    node *next;
} *nod;
nod a[2];
int s[nmax],k[2];
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;
    a[0]=a[1]=NULL;
    k[0]=k[1]=0;
    bool c;
    nod l;
    for (int i=p;i<=u;++i)
    {
        c=(s[i] & m);
        l=new node;
        l->x=s[i];l->next=a[c];a[c]=l;
    }
    int w=p-1;
    for (int i=0;i<2;++i)
        for (nod l=a[i];l;++k[i],l=l->next) s[++w]=l->x;
    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;
}