Cod sursa(job #1714621)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 8 iunie 2016 21:19:42
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
///Nrx imi va datora un suc
#include <bits/stdc++.h>
using namespace std;

const int BYTE = 256;
const int NMAX = 500005;

queue<int> q[BYTE];
int        v[NMAX];

int mask(int arg, int step) {
    return (arg>>8*step) & (BYTE-1);
}

void xsort(int *a, int *b) {
    int len = b - a;

    for(int i=0; i<4; ++i) {
        for(int j=0; j<len; ++j)
            q[mask(a[j], i)].push(a[j]);
        for(int j=0, buff=0; j<BYTE; ++j) {
            while(!q[j].empty()) {
                a[buff++] = q[j].front();
                q[j].pop();
            }
        }
    }
}

int main(void) {
    FILE *fi = fopen("algsort.in", "r");
    FILE *fo = fopen("algsort.out", "w");
    int n;

    fscanf(fi,"%d",&n);
    for(int i=0; i<n; ++i)
        fscanf(fi,"%d",&v[i]);

    xsort(v, v+n);

    for(int i=0; i<n; ++i)
        fprintf(fo,"%d ",v[i]);
    fprintf(fo,"\n");

    fclose(fi);
    fclose(fo);
    return 0;
}