Cod sursa(job #1251859)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 29 octombrie 2014 22:49:43
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#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;

}