Cod sursa(job #514181)

Utilizator SpiderManSimoiu Robert SpiderMan Data 17 decembrie 2010 23:20:25
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
# include <cstdio>
# include <cstring>
# include <algorithm>

const int MAX = 500001 ;

int N ;
int A[MAX], B[MAX] ;

inline void rad ( int N, int byte, int *A, int *B ) {
    int cnt[1024], C[1024] = { 1 } ;
    memset ( cnt, 0, sizeof cnt ) ;
    for ( int i = 1; i <= N; ++i )
        ++cnt[ A[i] >> byte & 1023 ] ;
    for ( int i = 1; i < 1024; ++i )
        C[i] = C[i - 1] + cnt[i - 1] ;
    for ( int i = 1; i <= N; ++i )
        B[ C[ A[i] >> byte & 1023 ]++ ] = A[i] ;
}

inline void radix ( int *A, int N ) {
    rad ( N, 0, A, B ) ;
    rad ( N, 10, B, A ) ;
    rad ( N, 20, A, B ) ;
    rad ( N, 30, B, A ) ;
}

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

    scanf ( "%d", &N ) ;
    for ( int i = 1; i <= N; ++i )
        scanf ( "%d", A + i ) ;

    radix ( A, N ) ;

    for ( int i = 1; i <= N; ++i )
        printf ( "%d ", A[i] ) ;
}