Cod sursa(job #3291708)

Utilizator G3K0Airinei Gabriel Vlad G3K0 Data 5 aprilie 2025 13:12:56
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.22 kb
#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;
}