Cod sursa(job #2491792)

Utilizator lflorin29Florin Laiu lflorin29 Data 13 noiembrie 2019 09:48:40
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#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;
}