Cod sursa(job #1494224)

Utilizator andru47Stefanescu Andru andru47 Data 30 septembrie 2015 20:50:37
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define NMAX 500010
#define BITMAX 32
#define BitSet 16
using namespace std;
long long n,i,a[NMAX],ap[1<<BitSet],subap[NMAX];
void radixXx(long long p)
{
    int i , mask = (1<<BitSet) - 1;
    memset(ap , 0 ,sizeof(ap));
    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];

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