Cod sursa(job #2679342)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 30 noiembrie 2020 12:55:15
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#include <algorithm>
#define NMAXX 500000
#define BUCKETS (1 << 16)
#define VALBIT 15

using namespace std;

int v1[NMAXX], v2[NMAXX], frecv[BUCKETS], indici[BUCKETS];

inline int nrbucket( int val ) {
    return val >> VALBIT;
}

int main()
{
    FILE *fin, *fout;
    int n, i;
    fin = fopen( "algsort.in", "r" );
    fout = fopen( "algsort.out", "w" );
    fscanf( fin, "%d", &n );
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d", &v1[i] );
    }
    for ( i = 0; i < n; i++ ) {
        frecv[nrbucket( v1[i] )]++;
    }
    for ( i = 1; i < BUCKETS; i++ ) {
        indici[i] = indici[i - 1] + frecv[i - 1];
    }
    for ( i = 0; i < n; i++ ) {
        v2[indici[nrbucket( v1[i] )]++] = v1[i];
    }
    sort( v2, v2 + frecv[0] - 1 );
    for ( i = 1; i < BUCKETS; i++ ) {
        indici[i] += indici[i - 1];
        sort( v2 + indici[i - 1], v2 + indici[i] - 1 );
    }
    for ( i = 0; i < n; i++ ) {
        fprintf( fout, "%d ", v2[i] );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}