Pagini recente » Cod sursa (job #868038) | Cod sursa (job #2921606) | Cod sursa (job #2543632) | Cod sursa (job #1270423) | Cod sursa (job #2679342)
#include <stdio.h>
#include <algorithm>
#define NMAXX 500000
#define BUCKETS (1 << 16)
#define VALBIT 15
using namespace std;
int v1[NMAXX], v2[NMAXX], frecv[BUCKETS], indici[BUCKETS];
inline int nrbucket( int val ) {
return val >> VALBIT;
}
int main()
{
FILE *fin, *fout;
int n, i;
fin = fopen( "algsort.in", "r" );
fout = fopen( "algsort.out", "w" );
fscanf( fin, "%d", &n );
for ( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v1[i] );
}
for ( i = 0; i < n; i++ ) {
frecv[nrbucket( v1[i] )]++;
}
for ( i = 1; i < BUCKETS; i++ ) {
indici[i] = indici[i - 1] + frecv[i - 1];
}
for ( i = 0; i < n; i++ ) {
v2[indici[nrbucket( v1[i] )]++] = v1[i];
}
sort( v2, v2 + frecv[0] - 1 );
for ( i = 1; i < BUCKETS; i++ ) {
indici[i] += indici[i - 1];
sort( v2 + indici[i - 1], v2 + indici[i] - 1 );
}
for ( i = 0; i < n; i++ ) {
fprintf( fout, "%d ", v2[i] );
}
fclose( fin );
fclose( fout );
return 0;
}