Pagini recente » Cod sursa (job #2446203) | Cod sursa (job #2808635) | Cod sursa (job #2975694) | Cod sursa (job #1523380) | Cod sursa (job #2680672)
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define NMAX 500000
#define NVAL ( 1 << 31 )
#define NB ( 1 << 16 )
#define VALUES_PER_BUCKET ( 1 << 15 )
#define BITS 15
using namespace std;
int v[NMAX];
vector<int> b[NB];
void sort( int bi ) {
vector<int>& v = b[bi];
int u, n, max, p, i;
n = v.size();
for( u = n - 1; u > 0; u-- ) {
max = v[0];
p = 0;
for( i = 1; i <= u; i++ )
if( v[i] > max ) {
max = v[i];
p = i;
}
v[p] = v[u];
v[u] = max;
}
}
int main() {
FILE *fin, *fout;
int n, i, j, k;
fin = fopen( "algsort.in", "r" );
fscanf( fin, "%d", &n );
for( i = 0; i < n; i++ ) {
fscanf( fin, "%d", &v[i] );
b[v[i]>>BITS].push_back( v[i] );
}
fclose( fin );
n = 0;
for( i = 0; i < NB; i++ ) {
sort( i );
k = b[i].size();
for( j = 0; j < k; j++ )
v[n++] = b[i][j];
}
fout = fopen( "algsort.out", "w" );
for( i = 0; i < n; i++ )
fprintf( fout, "%d ", v[i] );
fclose( fout );
return 0;
}