Pagini recente » Cod sursa (job #1048446) | Cod sursa (job #2183165) | Cod sursa (job #2293859) | Cod sursa (job #669178) | Cod sursa (job #2911832)
#include <stdio.h>
#include <climits>
#define MAX_N 10000000
int v[MAX_N];
int res[MAX_N];
int frecv[10];
int sizeVect;
static inline int maxElem() {
int maxCif = v[0];
for (int i = 1; i < sizeVect; i++)
if (v[i] > maxCif)
maxCif = v[i];
return maxCif;
}
int main() {
FILE *fin, *fout;
int a, b, c;
int i, maxNrVect, put;
fin = fopen("radixsort.in", "r");
fscanf(fin, "%d%d%d%d", &sizeVect, &a, &b, &c);
fclose(fin);
v[0] = b;
for (i = 1; i < sizeVect; i++)
v[i] = (a * v[i - 1] + b) % c;
maxNrVect = maxElem();
for (put = 1; maxNrVect / put > 0; put *= 10) {
for (i = 0; i < 10; ++i)
frecv[i] = 0;
for (i = 0; i < sizeVect; i++)
frecv[(v[i] / put) % 10]++;
for (i = 1; i < 10; i++)
frecv[i] += frecv[i - 1];
for (i = sizeVect - 1; i >= 0; i--) {
res[frecv[(v[i] / put) % 10] - 1] = v[i];
//printf("%d %d\n", v[i], frecv[(v[i] / put) % 10] - 1);
frecv[(v[i] / put) % 10]--;
}
//printf("\n");
for (int i = 0; i < sizeVect; i++) {
v[i] = res[i];
res[i] = 0;
}
//for (i = 0; i < sizeVect; i++)
//printf("%d ", v[i]);
//printf("\n");
}
fout = fopen("radixsort.out", "w");
for (i = 0; i < sizeVect; i+=10)
fprintf(fout, "%d ", v[i]);
fprintf(fout, "\n");
fclose(fout);
return 0;
}