Cod sursa(job #2694292)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 8 ianuarie 2021 18:35:35
Problema Radix Sort Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <stdio.h>
#define MAX 10000000
#define MAX_BITS 32
#define BITS_PER_STEP 8
const int BASE = 1 << BITS_PER_STEP;
int freq[ BASE ], ind[ BASE ];
const int MASK = BASE - 1;
int v[ MAX ], rez[ MAX ];

void radixsort( int v[], int aux[], int n, int bits ){
    if( bits == MAX_BITS )
        return;
    int i;
    for( i = 0; i < BASE; i++ )
        freq[ i ] = 0;
    for( i = 0; i < n; i++ )
        ++freq[ v[ i ] >> bits & MASK ];
    ind[ 0 ] = 0;
    for( i = 1; i < BASE; i++ )
        ind[ i ] = freq[ i - 1 ] + ind[ i - 1 ];
    for( i = 0; i < n; i++ )
        aux[ ind[ v[ i ] >> bits & MASK ]++ ] = v[ i ];
    radixsort( aux, v, n, bits + BITS_PER_STEP );
}

int main()
{
    int n, A, B, C;
    FILE *fin = fopen( "radixsort.in", "r" );
    fscanf( fin, "%d %d %d %d", &n, &A, &B, &C );
    fclose( fin );
    v[ 0 ] = B;
    for( int i = 1; i < n; i++ )
        v[ i ] = ( ( long long )A * v[ i - 1 ] + B ) % C;
    radixsort( v, rez, n, 0 );
    FILE *fout = fopen( "radixsort.out", "w" );
    for( int i = 0; i < n; i += 10 )
        fprintf( fout, "%d ", v[ i ] );
    fclose( fout );
    return 0;
}