Cod sursa(job #3175731)

Utilizator andreifilimonPopescu Filimon Andrei Cosmin andreifilimon Data 26 noiembrie 2023 13:06:59
Problema Radix Sort Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <string.h>

#define MAXN 10000000
#define MAX_BITS 32
#define BITS_PER_STEP 8
#define BASE (1<<BITS_PER_STEP)
#define MASK (BASE-1)

int v1[MAXN+1], v2[MAXN+1];
int fq[BASE+1], ind[BASE+1];

void sort(int v[], int aux[], int n, int bitno)
{
    if(bitno==MAX_BITS)
        return;

    memset(fq, 0, sizeof(fq));

    int i;
    for(i=0; i<n; i++)
        fq[v[i]>>bitno&MASK]++;

    ind[0]=0;
    for(i=1; i<=BASE; i++)
        ind[i]=ind[i-1]+fq[i-1];

    for(i=0; i<n; i++)
        aux[ind[v[i]>>bitno&MASK]++]=v[i];

    sort(aux, v, n, bitno+BITS_PER_STEP);
}

int main()
{
    FILE *fin, *fout;
    fin=fopen("radixsort.in", "r");
    fout=fopen("radixsort.out", "w");
    int n, a, b, c;
    fscanf(fin, "%d%d%d%d", &n, &a, &b, &c);
    int i;
    v1[0]=b;
    for(i=1; i<n; i++)
        v1[i]=((long long)a*v1[i-1]+b)%c;
    sort(v1, v2, n, 0);
    for(i=0; i<n; i+=10)
        fprintf(fout, "%d ", v1[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}