Cod sursa(job #3160725)

Utilizator davidpalagniucDavid Palagniuc davidpalagniuc Data 24 octombrie 2023 22:57:38
Problema Radix Sort Scor 30
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#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;
}