Pagini recente » Cod sursa (job #3293415) | Cod sursa (job #3291836) | Cod sursa (job #3291486) | Cod sursa (job #3292929) | Cod sursa (job #3291708)
#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>0; 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;
}