Cod sursa(job #2361759)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 2 martie 2019 18:25:57
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

#define RADIX 0xFF
#define get_byte(x) ((x >> (8 * byte)) & RADIX)
#define NMAX 500005
using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[NMAX], aux[NMAX];

void countSort(int A[], int B[], int byte, int lg){
    int xCount[256];
    int index[256];

    memset(xCount, 0, sizeof(xCount));

    for(int i = 1; i <= lg; ++i)
        xCount[get_byte(A[i])] ++;

    index[0] = 0;

    for(int i = 1; i <= 256; ++i)
        index[i] = index[i - 1] + xCount[i - 1];

    for(int i = 1; i <= lg; ++i)
        B[++index[get_byte(A[i])]] = A[i];
}

void radixSort(int vec[], int lg){
    int total = sizeof(vec[1]);
    for(int i = 0; i < total; ++i){
        if(i % 2 == 0)
            countSort(vec, aux, i, lg);
        else countSort(aux, vec, i, lg);
    }
}

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= n; ++i)
        fin >> v[i];

    radixSort(v, n);

    for(int i = 1; i <= n; ++i)
        fout << v[i] << ' ';
    fout << '\n';
    return 0;
}