Pagini recente » Cod sursa (job #3290320) | Cod sursa (job #3291696)
#include <algorithm>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <cstdio>
#include <sstream>
void bucketSort(std::vector<long long>& a, long long nr = 10000) {
long long mi = *std::min_element(a.begin(), a.end());
long long ma = *std::max_element(a.begin(), a.end());
long long size = (ma - mi) / nr;
if (size == 0)
size = 1;
std::vector<std::vector<long long>> bucket(nr);
for (size_t i = 0; i < a.size(); i++) {
long long poz = std::min((a[i] - mi) / size, nr - 1);
bucket[poz].push_back(a[i]);
}
for (long long i = 0; i < nr; i++) {
std::sort(bucket[i].begin(), bucket[i].end());
}
long long k = 0;
for (long long i = 0; i < nr; i++) {
for (size_t j = 0; j < bucket[i].size(); j++) {
a[k++] = bucket[i][j];
}
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
long long n;
std::cin >> n;
std::vector<long long> a;
for (long long i = 0; i < n; i++) {
long long x;
std::cin >> x;
a.push_back(x);
}
bucketSort(a);
for (long long i = 0; i < n; i++)
std::cout << a[i] << " ";
return 0;
}