Pagini recente » Cod sursa (job #3165015) | Cod sursa (job #482737) | Cod sursa (job #1747901) | Cod sursa (job #236693) | Cod sursa (job #3133026)
#pragma GCC optimize("O2")
#include <iostream>
#include <fstream>
#include <cstring>
std::ifstream in(static_cast<const char*>("algsort.in"));
std::ofstream out(static_cast<const char*>("algsort.out"));
constexpr std::size_t nmax = 500003;
std::size_t n, v[nmax], t[nmax];
static inline std::size_t partition(const std::size_t& s, const std::size_t& d) {
const int pz = s + (rand() % (d - s + 1));
const std::size_t& pivot = v[pz];
std::size_t k = 0, p = pz;
for(std::size_t i = s; i <= d; ++i) {
if(i == pz) continue;
if(v[i] < pivot) t[++k] = v[i];
}
t[++k] = pivot; p = s + k - 1;
for(std::size_t i = s; i <= d; ++i) {
if(i == pz) continue;
if(v[i] >= pivot) t[++k] = v[i];
}
std::memcpy(static_cast<void*>(v + s), static_cast<void*>(t + 1), k * sizeof(std::size_t));
return p;
}
static inline void sort(const std::size_t& s, const std::size_t& d) {
if(s >= d) return;
const std::size_t p = partition(s, d);
sort(s, p - 1);
sort(p + 1, d);
}
int main(void) {
std::ios::sync_with_stdio(false);
in.tie(nullptr);
out.tie(nullptr);
in >> n;
for(std::size_t i = 1; i <= n; ++i) in >> v[i];
sort(1, n);
for(std::size_t i = 1; i <= n; ++i) out << v[i] << ' ';
in.close();
out.close();
return 0;
}