Pagini recente » Cod sursa (job #1994867) | Cod sursa (job #1561747) | Cod sursa (job #1949152) | Cod sursa (job #2059700) | Cod sursa (job #1485898)
#include <stdio.h>
#include <stdlib.h>
#define B 256
int t[10000005];
int temp[10000005];
int main() {
FILE* fin = fopen("radixsort.in", "r");
int n;
int a, b, c;
fscanf(fin, "%d %d %d %d\n", &n, &a, &b, &c);
fclose(fin);
//int* t = (int*)malloc(n * sizeof(int));
int i;
t[0] = b % c;
for(i=1; i<n; i++) {
t[i] = (a * 1LL * t[i - 1] + b) % c;
}
int maxCifra = 0;
while(c > 0) {
maxCifra++;
c = c / B;
}
int base = 1;
int buckSize[B];
//int* temp = (int*)malloc(n * sizeof(int));
for(i=0; i<maxCifra; i++) {
int j;
for(j=0; j<B; j++) {
buckSize[j] = 0;
}
for(j=0; j<n; j++) {
buckSize[(t[j] / base) % B]++;
}
buckSize[0]--;
for(j=1; j<B; j++) {
buckSize[j] = buckSize[j] + buckSize[j - 1];
}
for(j=n-1; j>=0; j--) {
int cifra = (t[j] / base) % B;
temp[buckSize[cifra]] = t[j];
buckSize[cifra]--;
}
for(j=0; j<n; j++) {
t[j] = temp[j];
}
base = base * B;
}
FILE* fout = fopen("radixsort.out", "w");
for(i=0; i<n; i+=10) {
fprintf(fout, "%d ", t[i]);
}
fprintf(fout, "\n");
fclose(fout);
//free(temp);
//free(t);
return 0;
}