Pagini recente » Cod sursa (job #3291833) | Cod sursa (job #3291970) | Cod sursa (job #3289677) | Cod sursa (job #3293002) | Cod sursa (job #3291717)
#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];
}
}
}
// void heapy (std::vector<long long>& a,long long n, long long i) {
// long long big=i;
// long long lson=2*i+1;
// long long rson=2*i+2;
// if (lson<n && a[lson]>a[big]) {
// big=lson;
// }
// if (rson<n && a[rson]>a[big]) {
// big=rson;
// }
// if (big!=i) {
// std::swap(a[i],a[big]);
// heapy(a,n,big);
// }
// }
void heapsort(std::vector<long long>& a, long long n) {
auto heapy = [&](int n, int i, auto&& heapy_ref) -> void {
long long big = i;
long long lson = 2 * i + 1;
long long rson = 2 * i + 2;
if (lson < n && a[lson] > a[big]) {
big = lson;
}
if (rson < n && a[rson] > a[big]) {
big = rson;
}
if (big != i) {
std::swap(a[i], a[big]);
heapy_ref(n, big, heapy_ref);
}
};
for (long long i = n / 2 - 1; i >= 0; i--) {
heapy(n, i, heapy);
}
for (int i = n - 1; i >= 1; i--) {
std::swap(a[0], a[i]);
heapy(i, 0, heapy);
}
}
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);
}
heapsort(a,n);
for (long long i = 0; i < n; i++)
std::cout << a[i] << " ";
return 0;
}