Cod sursa(job #966380)

Utilizator Theorytheo .c Theory Data 25 iunie 2013 20:13:37
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
//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;
}