Pagini recente » Cod sursa (job #322112) | Cod sursa (job #2177128) | Cod sursa (job #3180139) | Cod sursa (job #2178707) | Cod sursa (job #3160725)
#include <stdio.h>
#include <stdlib.h>
#define ull unsigned long long
void rsort(ull *v, ull n, ull s, ull **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(ull *v, ull n) {
ull **t=malloc(2*sizeof(ull*));
t[0]=malloc(n*sizeof(ull));
t[1]=malloc(n*sizeof(ull));
for(ull 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,a,b,c;
fscanf(fin,"%llu %llu %llu %llu",&n,&a,&b,&c);
fclose(fin);
ull *v=malloc(n*sizeof(ull));
*v=b;
for(ull i=1;i<n;++i) v[i]=(a*v[i-1]+b)%c;
rxsort(v,n);
FILE *fout=fopen("radixsort.out","w");
for(int i=0;i<n;i+=10) fprintf(fout,"%llu ",v[i]);
fclose(fout);
free(v);
return 0;
}