Cod sursa(job #2679781)

Utilizator LucaMihaiLM10Luca Ilie LucaMihaiLM10 Data 1 decembrie 2020 14:38:58
Problema Radix Sort Scor 70
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#define MAX_N 10000000
#define MAX_B 32
#define GRUP_B 16
#define MASK 65535
int v1[MAX_N], v2[MAX_N], f[MASK + 1], ind[MASK + 1];
void sort(int v[], int aux[], int n, int b ) {
    int i;
    if ( b == MAX_B )
        return;
    for ( i = 0; i <= MASK; i++ )
        f[i] = 0;
    for ( i = 0; i < n; i++ )
        f[v[i] >> b & MASK]++;
    ind[0] = 0;
    for ( i = 1; i <= MASK; i++ )
        ind[i] = ind[i - 1] + f[i - 1];
    for (i = 0; i < n; ++i)
        aux[ind[v[i] >> b & MASK]++] = v[i];
    sort( aux, v, n, b + GRUP_B );
}
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 );
    v1[0] = b;
    for ( i = 1; i < n; i++ )
        v1[i] = ((long long)a * v1[i - 1] + b) % c;
    sort( v1, v2, n, 0 );
    fout = fopen( "radixsort.out", "w" );
    for ( i = 0; i < n; i += 10 )
        fprintf( fout, "%d ", v1[i] );
    fclose( fout );
    return 0;
}