Cod sursa(job #1346034)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 17 februarie 2015 23:25:34
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <algorithm>

using namespace std;

#define IN_FILE "algsort.in"
#define OUT_FILE "algsort.out"
#define MAX_N 500005

unsigned v[ MAX_N ];
int main( ) {
    FILE *f;
    unsigned N, i, l;

    f = fopen( IN_FILE, "r" );
    fscanf( f, "%u", &N );
    l = ( N >> 3 ) << 3;
    i = 0;
    for( ; i < l; i += 8 )
        fscanf( f, "%u%u%u%u%u%u%u%u", v + i, v + i + 1, v + i + 2, v + i + 3, v + i + 4, v + i + 5, v + i + 6, v + i + 7 );
    switch( N & 7 ) {
    case 7:
        fscanf( f, "%u%u%u%u%u%u%u", v + i, v + i + 1, v + i + 2, v + i + 3, v + i + 4, v + i + 5, v + i + 6 );
        break;
    case 6:
        fscanf( f, "%u%u%u%u%u%u", v + i, v + i + 1, v + i + 2, v + i + 3, v + i + 4, v + i + 5 );
        break;
    case 5:
        fscanf( f, "%u%u%u%u%u", v + i, v + i + 1, v + i + 2, v + i + 3, v + i + 4 );
        break;
    case 4:
        fscanf( f, "%u%u%u%u", v + i, v + i + 1, v + i + 2, v + i + 3 );
        break;
    case 3:
        fscanf( f, "%u%u%u", v + i, v + i + 1, v + i + 2 );
        break;
    case 2:
        fscanf( f, "%u%u", v + i, v + i + 1 );
        break;
    case 1:
        fscanf( f, "%u", v + i );
        break;
    }
    fclose( f );
    sort( v, v + N );
    f = fopen( OUT_FILE, "w" );
    for( i = 0; i != N; ++i )
        fprintf( f, "%u ", v[ i ] );
    fclose( f );
    return 0;
}