Pagini recente » Cod sursa (job #1049536) | Cod sursa (job #171724) | Cod sursa (job #379466) | Cod sursa (job #602469) | Cod sursa (job #793920)
Cod sursa(job #793920)
#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;
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 ++)
Sum[i] = Sum[i - 1] + Cnt[i - 1];
for (i = 0; i < N; i ++)
B[ Sum[ (A[i] >> bit) & mask ] ++ ] = 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;
}