Pagini recente » Cod sursa (job #1097441) | Cod sursa (job #2307226) | Cod sursa (job #381606) | Cod sursa (job #1333729) | Cod sursa (job #793925)
Cod sursa(job #793925)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
const int MAXN = 500010;
const int mask = (1 << 16) - 1;
int N;
int A[MAXN], B[MAXN];
int Cnt[1 << 16];
int Sum[1 << 16];
void radix (int *A, int *B, const int bit)
{
int i, x, a = 0;
for (i = 0; i <= mask; i ++)
Cnt[i] = 0;
for (i = 0; i < N; i ++)
++ Cnt[ (A[i] >> bit) & mask ];
for (i = 1; i <= mask; i ++)
Cnt[i] += Cnt[i - 1];
for (i = 0; i < N; i ++){
x = (A[i] >> bit) & mask;
if (!x)
B[ a ++ ] = A[i];
else
B[ Cnt[x - 1] ++ ] = A[i];
}
}
void radix_sort ()
{
radix (A, B, 0);
radix (B, A, 16);
//radix (A, B, 32);
}
int main ()
{
int i;
in >> N;
for (i = 0; i < N; i ++)
in >> A[i];
radix_sort ();
for (i = 0; i < N; i ++)
out << A[i] << " ";
return 0;
}