Pagini recente » Cod sursa (job #1311398) | Cod sursa (job #3225826) | Cod sursa (job #2817705) | Cod sursa (job #1534163) | Cod sursa (job #2676229)
#include <stdio.h>
#include <algorithm>
using namespace std;
const int NMAX = 5e5;
const int NO_BUCKETS = (1 << 16);
const int VALUES_PER_BUCKET_BITS = 15;
int v1[NMAX], v2[NMAX];
int freq[NO_BUCKETS], ind[NO_BUCKETS];
static inline int getBucketNumber(int value) {
return value >> VALUES_PER_BUCKET_BITS;
}
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]);
fclose(fin);
for ( i = 0; i < n; i++ )
++freq[getBucketNumber(v1[i])];
for ( i = 1; i < NO_BUCKETS; i++ )
ind[i] = ind[i - 1] + freq[i - 1];
for ( i = 0; i < n; i++ )
v2[ind[getBucketNumber(v1[i])]++] = v1[i];
sort(v2, v2 + freq[0]);
for (i = 1; i < NO_BUCKETS; ++i) {
freq[i] += freq[i - 1];
sort(v2 + freq[i - 1], v2 + freq[i]);
}
fout = fopen("algsort.out", "w");
for (i = 0; i < n; ++i)
fprintf(fout, "%d ", v2[i]);
fclose(fout);
return 0;
}