Pagini recente » Cod sursa (job #709437) | Cod sursa (job #2276284) | Cod sursa (job #955658) | Cod sursa (job #616582) | Cod sursa (job #1251859)
#include <fstream>
#include <cstring>
#define Nmax 500100
#define Bmax (1 << 8)
#define Byte(x) ((x >> Step) & (Bmax - 1))
using namespace std;
int N, A[Nmax], Tmp[Nmax];
void radixSort() {
int i, Step, Size[Bmax], Index[Bmax];
for(Step = 0; Step <= 24; Step += 8) {
memset(Size, 0, sizeof(Size));
for(i = 1; i <= N; i++) {
Tmp[i] = A[i];
Size[Byte(A[i])]++;
}
Index[0] = 1;
for(i = 1; i < Bmax; i++)
Index[i] = Index[i - 1] + Size[i - 1];
for(i = 1; i <= N; i++)
A[Index[Byte(Tmp[i])]++] = Tmp[i];
}
}
void Read() {
ifstream in("algsort.in");
in >> N;
for(int i = 1; i <= N; i++)
in >> A[i];
in.close();
}
void Write() {
ofstream out("algsort.out");
for(int i = 1; i <= N; i++)
out << A[i] << ' ';
out << '\n';
out.close();
}
int main() {
Read();
radixSort();
Write();
return 0;
}