Pagini recente » Rating Hadade Andrey (TheTiger) | Cod sursa (job #142968) | Castel3 | Cod sursa (job #2239764) | Cod sursa (job #2753589)
#include <bits/stdc++.h>
void soviet_sort (std::vector<int> &v) {
int n = v.size();
if (n <= 1) return;
if (n == 2) {
if (v[0] > v[1]) std::swap(v[0], v[1]);
return;
}
std::vector<int> ramasi, afara;
ramasi.push_back(v[0]);
for (int i = 1; i < (int)v.size(); i++) {
if (ramasi.back() <= v[i]) ramasi.push_back(v[i]);
else afara.push_back(v[i]);
}
v.clear();
soviet_sort(afara);
v.resize(n);
std::merge(ramasi.begin(), ramasi.end(), afara.begin(), afara.end(), v.begin());
}
int main () {
std::ifstream fin ("algsort.in");
std::ofstream fout ("algsort.out");
int n; fin >> n;
std::vector<int> v(n);
for (int i = 0; i < n; i++) fin >> v[i];
std::mt19937 mt = std::mt19937();
mt.seed(time(NULL));
std::shuffle(v.begin(), v.end(), mt);
soviet_sort(v);
for (int i = 0; i < n; i++) fout << v[i] << ' ';
fin.close();
fout.close();
return 0;
}