Cod sursa(job #1494014)

Utilizator andru47Stefanescu Andru andru47 Data 30 septembrie 2015 14:08:30
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define NMAX 500000
#define BITMAX 32
#define BitSet 16
using namespace std;
int n,i,a[NMAX+10],ap[1<<BitSet],subap[NMAX+10];
void radixXx(int p)
{
    int i , mask = (1<<BitSet) - 1;
    for (i = 1 ; i <= n ; ++i)
        ++ap[(a[i]&(mask<<p)>>p)];

    for (i = 1 ; i <= mask ; ++i)
        ap[i] += ap[i-1];

    for (i = mask ; i >= 1; --i)
        ap[i] = ap[i-1];

    ap[0]=0;

    for (i = 1 ; i <= n ; ++i)
        subap[++ap[(a[i]&(mask<<p)>>p)]]=a[i];

    memcpy(a,subap,sizeof(subap));


    return ;
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d\n",&n);
    for (i = 1 ; i <= n ; ++i)
        scanf("%d ",&a[i]);
    for ( i = 0 ; i < BITMAX ; i+=BitSet)
        radixXx( i ) ;
    for (i=1 ; i <= n ; ++i)
        printf("%d ",a[i]);
    return 0;
}