Pagini recente » Cod sursa (job #2937128) | Cod sursa (job #1427918) | Cod sursa (job #2294212) | Cod sursa (job #2984826) | Cod sursa (job #1494224)
#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;
}