Pagini recente » Cod sursa (job #840997) | Cod sursa (job #1057610) | Cod sursa (job #2735389) | Cod sursa (job #756982) | Cod sursa (job #966380)
Cod sursa(job #966380)
//radix sort(2 ^ 31)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int Nmax = 500009;
const int Limit = (1<<16) - 1;
int N; int A[Nmax]; int B[Nmax];
void Read(){
fin >> N;
for(int i = 1; i <= N; ++i)
fin >> A[i];
}
void Rad(int N, int byte, int A[], int B[]){
int Cnt[Limit]; int Ind[Limit];
memset(Cnt, 0, sizeof(Cnt));
for(int i = 1; i <= N; ++i) ++Cnt[Limit & (A[i] >> byte)];
Ind[0] = 1;
for(int i = 1; i <= Limit; ++i) Ind[i] = Ind[i - 1] + Cnt[i - 1];
for(int i = 1; i <= N; ++i) B[ Ind[Limit & (A[i] >> byte)]++ ] = A[i];
}
void Print (){
for(int i = 1; i <= N; ++i)
fout << A[i] <<" ";
}
void Solve(){
Rad(N, 0, A, B);
Rad(N, 16, B, A);
//Rad(N, 16, A, B);
//Rad(N, 24, B, A);
}
int main(){
Read ();
Solve ();
Print ();
return 0;
}