Pagini recente » Cod sursa (job #2850397) | Cod sursa (job #522231) | Cod sursa (job #2597792) | Cod sursa (job #3263309) | Cod sursa (job #1485816)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct vectorInt {
int* data;
int size;
int capacity;
} vectInt;
typedef vectInt* vector;
vector vec_new(int initCap) {
if(initCap < 10) {
initCap = 10;
}
vector vect = (vector)malloc(sizeof(vectInt));
vect->capacity = initCap;
vect->size = 0;
vect->data = (int*)malloc(vect->capacity * sizeof(int));
return vect;
}
void vec_free(vector vect) {
free(vect->data);
free(vect);
}
void vec_push_back(vector vect, int val) {
if(vect->size == vect->capacity) {
vect->capacity = 2 * vect->capacity;
int* newData = (int*)malloc(vect->capacity * sizeof(int));
memcpy(newData, vect->data, vect->size * sizeof(int));
free(vect->data);
vect->data = newData;
}
vect->data[vect->size] = val;
vect->size = vect->size + 1;
}
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 t[10000000];
int i;
t[0] = 1;
for(i=1; i<n; i++) {
t[i] = (a * t[i - 1] + b) % c;
//printf("%d ", t[i]);
}
//printf("\n");
int maxCifra = 0;
while(c > 0) {
maxCifra++;
c = c / 10;
}
int base = 1;
vector bucket[10];
for(i=0; i<maxCifra; i++) {
int j;
for(j=0; j<10; j++) {
bucket[j] = vec_new(0);
}
for(j=0; j<n; j++) {
int cifra = (t[j] / base) % 10;
vec_push_back(bucket[cifra], t[j]);
}
int h = 0;
int k;
for(j=0; j<10; j++) {
for(k=0; k<(bucket[j]->size); k++) {
t[h] = bucket[j]->data[k];
//printf("%d ", t[h]);
h++;
}
}
for(j=0; j<10; j++) {
vec_free(bucket[j]);
}
base = base * 10;
}
/*for(i=0; i<n; i++) {
printf("%d ", t[i]);
}
printf("\n");*/
FILE* fout = fopen("radixsort.out", "w");
for(i=1; i<n; i+=10) {
fprintf(fout, "%d ", t[i]);
}
fprintf(fout, "\n");
fclose(fout);
//free(t);
return 0;
}