Pagini recente » Cod sursa (job #288954) | Cod sursa (job #1358359) | Cod sursa (job #3003837) | Cod sursa (job #77471) | Cod sursa (job #1494014)
#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;
}