Pagini recente » Cod sursa (job #2541005) | Cod sursa (job #2397721) | Cod sursa (job #2957990) | Cod sursa (job #2055612) | Cod sursa (job #826726)
Cod sursa(job #826726)
#include<stdio.h>
#define maxn 500005
FILE*f=fopen("algsort.in","r");
FILE*g=fopen("algsort.out","w");
const int base = 1023,pbase = 10;
int n,A[maxn],AUX[maxn],count[base];
inline void radix ( int *A ){
int step = 0;
for ( int pasi = 1 ; pasi <= 4; ++pasi ){
for ( int i = 1 ; i <= n ; ++i ){
++count[ (A[i]>>step)&base ];
}
for ( int i = 0 ; i <= base ; ++i ){
count[i] += count[i-1];
}
for ( int i = n ; i >= 1 ; --i ){
int last = ((A[i]>>step)&base);
AUX[ count[last]-- ] = A[i];
}
step += pbase;
for ( int i = 1 ; i <= n ; ++i ){
A[i] = AUX[i];
}
for ( int i = 0 ; i <= base ; ++i ){
count[i] = 0;
}
}
}
int main () {
fscanf(f,"%d",&n);
for ( int i = 1 ; i <= n ; ++i ){
fscanf(f,"%d",&A[i]);
}
radix(A);
for ( int i = 1 ; i <= n ; ++i ){
fprintf(g,"%d ",A[i]);
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}