Cod sursa(job #2679459)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 30 noiembrie 2020 16:40:21
Problema Radix Sort Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <stdio.h>
#define MAX_N 10000000
#define MAX_B 32
#define GRUP_B 8
#define MASK 255
int v[MAX_N], v_aux[MAX_N], f[MASK + 1];
int main() {
    FILE *fin, *fout;
    int n, a, b, c, aux, t, bit, 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;
    for ( bit = 0; bit < MAX_B; bit += GRUP_B ) {
        for( i = 0; i <= MASK; i++ )
            f[i] = 0;
        for ( i = 0; i < n; i++ )
            f[v[i] >> bit & 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++ )
            v_aux[f[v[i] >> bit & MASK]++] = v[i];
        for( i = 0; i < n; i++ )
            v[i] = v_aux[i];
    }
    fout = fopen( "radixsort.out", "w" );
    for ( i = 0; i < n; i += 10 )
        fprintf( fout, "%d ", v[i] );
    fclose( fout );
    return 0;
}