Cod sursa(job #1014825)

Utilizator Teodor94Teodor Plop Teodor94 Data 23 octombrie 2013 14:43:21
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <cstdio>
#include <cassert>
#include <vector>

using namespace std;

#define MAX_N 500000
#define BASE 16

int n, v[MAX_N];
vector < int >  a[BASE];

void read( FILE *fin ) {
    assert( fscanf( fin, "%d", &n ) == 1 );
    for ( int i = 0; i < n; ++i )
        assert( fscanf( fin, "%d", &v[i] ) == 1 );
}

void write( FILE *fout ) {
    for ( int i = 0; i < n; ++i )
        fprintf( fout, "%d ", v[i] );
}

void radixs( int curr_byte ) {
    if ( curr_byte == 8 )
        return;

    int i;
    for ( i = 0; i < n; ++i )
        a[ v[i] >> ( curr_byte << 2 ) & 15 ].push_back( v[i] );

    i = 0;
    for ( int digit = 0; digit < BASE; ++digit ) {
        for ( vector < int > :: iterator it = a[digit].begin(); it != a[digit].end(); ++it )
            v[i++] = *it;

        a[digit].clear();
    }

    radixs( curr_byte + 1 );
}

int main() {
    FILE *fin, *fout;

    fin = fopen( "algsort.in", "r" );
    read( fin );
    fclose( fin );

    radixs( 1 );

    fout = fopen( "algsort.out", "w" );
    write( fout );
    fclose( fout );
}