Pagini recente » Cod sursa (job #106621) | Cod sursa (job #2374603) | Cod sursa (job #164223) | Cod sursa (job #1928406) | Cod sursa (job #2680680)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500000
#define NVAL ( 1 << 31 )
#define NB ( 1 << 16 )
#define VALUES_PER_BUCKET ( 1 << 15 )
#define BITS 15
int v1[NMAX], v2[NMAX];
int ind[NB], f[NB];
void sort( int begin, int end ) {
int p, i, u, max;
for( u = end - 1; u > begin; u-- ) {
max = v2[0];
p = 0;
for( i = begin + 1; i <= u; i++ )
if( v2[i] > max ) {
max = v2[i];
p = i;
}
v2[p] = v2[u];
v2[u] = max;
}
}
int main() {
FILE *fin, *fout;
int n, i;
fin = fopen( "algsort.in", "r" );
fscanf( fin, "%d", &n );
for( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v1[i] );
f[v1[i]>>BITS]++;
}
fclose( fin );
for( i = 1; i < NB; i++ )
ind[i] = ind[i-1] + f[i-1];
for( i = 0; i < n; i++ )
v2[ind[v1[i]>>BITS]++] = v1[i];
sort( 0, f[0] );
for( i = 1; i < NB; i++ ) {
f[i] += f[i-1];
sort( f[i-1], f[i] );
}
fout = fopen( "algsort.out", "w" );
for( i = 0; i < n; i++ )
fprintf( fout, "%d ", v2[i] );
fclose( fout );
return 0;
}