Cod sursa(job #2694284)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 8 ianuarie 2021 17:55:43
Problema Radix Sort Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <vector>
#define MAX_BITS 32
#define BITS_PER_STEP 4
const int BASE = 1 << BITS_PER_STEP;
std::vector<int> bucket[ BASE ];
const int MASK = BASE - 1;
int v[ 10000000 ];

void radixsort( int v[], int n, int bits ){
    if( bits == MAX_BITS )
        return;
    int i, l;
    unsigned int c;
    for( i = 0; i < n; i++ )
        bucket[ v[ i ] >> bits & MASK ].push_back( v[ i ] );

    i = 0;
    for( l = 0; l < BASE; l++ ){
        for( c = 0; c < bucket[ l ].size(); c++ )
            v[ i++ ] = bucket[ l ][ c ];
        bucket[ l ].clear();
    }
    radixsort( 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 ] = ( A * v[ i - 1 ] + B ) % C;
    radixsort( v, 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;
}