Pagini recente » Cod sursa (job #3216117) | Cod sursa (job #1088733) | Cod sursa (job #20868) | Cod sursa (job #2898176) | Cod sursa (job #3160731)
#include <stdio.h>
#include <stdlib.h>
#define ull unsigned long long
void rsort(unsigned *v, ull n, unsigned s, unsigned **t) {
ull it[2];
it[0]=0;
it[1]=0;
for(ull i=0;i<n;++i) {
ull p=((ull)(1))&(v[i]>>s);
t[p][it[p]]=v[i];
++it[p];
}
for(ull i=0;i<it[0];++i)
v[i]=t[0][i];
for(ull i=0;i<it[1];++i)
v[it[0]+i]=t[1][i];
}
void rxsort(unsigned *v, ull n) {
unsigned **t=malloc(2*sizeof(unsigned*));
t[0]=malloc(n*sizeof(unsigned));
t[1]=malloc(n*sizeof(unsigned));
for(unsigned i=0;i<64;++i) {
rsort(v,n,i,t);
}
free(t[0]);
free(t[1]);
free(t);
}
int main() {
FILE *fin=fopen("radixsort.in","r");
ull n;
unsigned a,b,c;
fscanf(fin,"%llu %u %u %u",&n,&a,&b,&c);
fclose(fin);
unsigned *v=malloc(n*sizeof(unsigned));
*v=b;
for(ull i=1;i<n;++i) v[i]=((a*v[i-1])%c+b%c)%c;
rxsort(v,n);
FILE *fout=fopen("radixsort.out","w");
for(int i=0;i<n;i+=10) fprintf(fout,"%u ",v[i]);
fclose(fout);
free(v);
return 0;
}