Pagini recente » Cod sursa (job #2138022) | Cod sursa (job #377120) | Cod sursa (job #2526424) | Cod sursa (job #3203449) | Cod sursa (job #3175728)
#include <stdio.h>
#include <stdlib.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;
}