Cod sursa(job #3291696)

Utilizator G3K0Airinei Gabriel Vlad G3K0 Data 5 aprilie 2025 12:45:15
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 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];
        }
    }
}

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;
}