Pagini recente » Cod sursa (job #127111) | Cod sursa (job #1985832) | Cod sursa (job #2451137) | Cod sursa (job #2598577) | Cod sursa (job #2675885)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 500000
#define NO_VALUES (1 << 31)
#define NO_BUCKETS (1 << 16)
#define VALUES_PER_BUCKET (1 << 15)
#define VALUES_PER_BUCKET_BITS 15
int v[MAX_N];
vector<int> bucket[NO_BUCKETS];
inline int getBucketNumber(int value) {
return value >> VALUES_PER_BUCKET_BITS;
}
int main() {
FILE* fin = fopen("algsort.in", "r");
int n, i, j, k;
fscanf(fin, "%d", &n);
for (i = 0; i < n; ++i)
fscanf(fin, "%d", &v[i]);
fclose(fin);
for (i = 0; i < n; ++i)
bucket[getBucketNumber(v[i])].push_back(v[i]);
k = 0;
for (i = 0; i < NO_BUCKETS; ++i) {
sort( bucket[i].begin(), bucket[i].end());
for (j = 0; j < bucket[i].size(); ++j)
v[k++] = bucket[i][j];
}
FILE* fout = fopen("algsort.out", "w");
for (i = 0; i < n; ++i)
fprintf(fout, "%d ", v[i]);
fclose(fout);
return 0;
}