Pagini recente » Cod sursa (job #1818187) | Cod sursa (job #3132129) | Cod sursa (job #3218097) | Cod sursa (job #2493346) | Cod sursa (job #2491792)
#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int main() {
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int n;
cin >> n;
vector<int>v(n);
for(int i = 0; i < n; ++i) {
cin >> v[i];
}
vector<int>temp(n);
function<void(int, int)>f = [&] (int st, int dr) {
if(st >= dr)
return;
int mid = uniform_int_distribution<int>(st, dr)(rng);
f(st, mid);
f(mid + 1, dr);
int pos = st, i = st, j = mid + 1;
while(i <= mid || j <= dr) {
if(i == mid + 1)
temp[pos++] = v[j++];
else if(j == dr + 1) temp[pos++] = v[i++];
else {
if(v[i] < v[j])
temp[pos++] = v[i++];
else temp[pos++] = v[j++];
}
}
for(int at = st; at <= dr; at++)
v[at] = temp[at];
};
f(0, n - 1);
for(int i = 0; i < n; ++i)
cout << v[i] << ' ';
cout << '\n';
return 0;
}