Cod sursa(job #2679396)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 30 noiembrie 2020 14:59:26
Problema Radix Sort Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <stdio.h>
#define MAX_N 10000000
#define MAX_B 32
#define GRUP_B 16
#define MASK 65535
int v[MAX_N], v_aux[MAX_N], f[MASK + 1];
void radixsort( int n ) {
    int aux, t, p, b, i;
    for ( b = 0; b < MAX_B; b += GRUP_B ) {
        for( i = 0; i <= MASK; i++ )
            f[i] = 0;
        for ( i = 0; i < n; i++ )
            f[v[i] >> b & MASK]++;
        t = f[0];
        f[0] = 0;
        for ( i = 1; i <= MASK; i++ ) {
            aux = f[i];
            f[i] = f[i - 1] + t;
            t = aux;
        }
        for( i = 0; i < n; i++ ) {
            p = v[i] >> b & MASK;
            v_aux[f[p]] = v[i];
            f[p]++;
        }
        for( i = 0; i < n; i++ )
            v[i] = v_aux[i];
    }
}
int main() {
    FILE *fin, *fout;
    int n, a, b, c, i;
    fin = fopen( "radixsort.in", "r" );
    fscanf( fin, "%d%d%d%d", &n, &a, &b, &c );
    fclose( fin );
    v[0] = b;
    for ( i = 1; i < n; i++ )
        v[i] = ((long long)a * v[i - 1] + b) % c;
    radixsort( n );
    fout = fopen( "radixsort.out", "w" );
    for ( i = 0; i < n; i += 10 )
        fprintf( fout, "%d ", v[i] );
    fclose( fout );
    return 0;
}