Cod sursa(job #1695806)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 27 aprilie 2016 20:29:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

const int nmax = 1<<19;
const int dim = 8;

int n,i;
int v[nmax] , aux[nmax];
int ap[1<<dim];

void bagaradix(int p)
{
    memset(ap , 0 , sizeof(ap));

    int i;
    int mask = (1 << dim) - 1;
    for (i = 1; i <= n; ++i)
        ap[(v[i] >> p) & mask]++;

    for (i = 1; i <= mask; ++i)
        ap[i] += ap[i-1];

    for (i = mask; i ; --i) ap[i] = ap[i-1];
    ap[0] = 0;

    for (i = 1; i <= n; ++i)
        aux[++ap[(v[i] >> p) & mask]] = v[i];

    for (i = 1; i <= n; ++i)
        v[i] = aux[i];
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    scanf("%d", &n);
    for (i = 1; i <= n; ++i) scanf("%d",&v[i]);

    for (i = 0; i < 32; i += dim)
        bagaradix(i);

    for (i = 1; i <= n; i ++)
        printf("%d ", v[i]);

    return 0;
}