Pagini recente » Cod sursa (job #1656445) | Cod sursa (job #973941) | Cod sursa (job #2287446) | Cod sursa (job #1738349) | Cod sursa (job #1380132)
#include<cstdio>
#include<algorithm>
using namespace std;
int N, A, B, C, a[10000009], aux[10000009], cnt[300], ap[300];
void S (int left, int right)
{
int msk = 0;
for (int i=left; i<=right; i++)
msk |= 1<<i;
for (int i=0; i <= 256; i++)
cnt[i] = 0;
for (int i=1; i<=N; i++)
{
aux[i] = a[i];
cnt[(a[i] & msk) >> left] ++;
}
ap[0] = 0;
for (int i=1; i <= 256; i++)
cnt[i] += cnt[i-1], ap[i] = 0;
for (int i=1; i<=N; i++)
{
int type = (aux[i] & msk) >> left;
ap[type] ++;
if (type)
a[cnt[type - 1] + ap[type]] = aux[i];
else
a[ap[type]] = aux[i];
}
}
void Read (int &x) ;
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
Read (N);
for (int i=1; i<=N; i++)
Read (a[i]);
S (0, 7);
S (8, 15);
S (16, 23);
S (24, 31);
for (int i=1; i<=N; i ++)
printf ("%d ", a[i]);
printf ("\n");
return 0;
}
#define maxl 50000
int p = 0;
char sir[maxl];
void Next ()
{
if (++p == maxl)
fread (sir, 1, maxl, stdin), p = 0;
}
void Read (int &x)
{
for (; sir[p] < '0' || sir[p] > '9'; Next ()) ;
for (x = 0; sir[p] >= '0' && sir[p] <= '9'; Next ())
x = x * 10 + sir[p] - '0';
}