Pagini recente » Cod sursa (job #451762) | Cod sursa (job #2494065) | Cod sursa (job #2943488) | Cod sursa (job #2982086) | Cod sursa (job #2592507)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort_count(int *v, int *sorted, int n, int shft ) {
int vl;
int frq = 0;
int* app = calloc(300, sizeof(int));
int* indx = calloc(300, sizeof(int));
for(int i = 0; i < n; i++) {
vl = (v[i] >> (8 * shft)) & 0xff;
app[vl]++;
frq = vl > frq ? vl : frq;
}
for(int i = 1; i <= frq; i++) {
indx[i] = app[i-1] + indx[i - 1];
}
for(int i = 0; i < n; i++) {
vl = (v[i] >> (8 * shft)) & 0xff;
sorted[indx[vl]++] = v[i];
}
free(app);
free(indx);
return;
}
int main() {
int n, a, b, c;
FILE *f = fopen("radixsort.in", "r");
FILE *g = fopen("radixsort.out", "w");
fscanf(f, "%d %d %d %d", &n, &a, &b, &c);
int v[n], sorted[n];
v[0] = b % c;
v[0] = b;
for(int i = 1; i < n; i++) {
v[i] = (1LL * a * v[i - 1] % c + b) % c;
}
sort_count(v, sorted, n, 0);
sort_count(sorted, v, n, 1);
sort_count(v, sorted, n, 2);
sort_count(sorted, v, n, 3);
for(int i = 0; i < n; i += 10) {
fprintf(g, "%d ", v[i]);
}
fclose(g);
fclose(f);
}