Cod sursa(job #3341655)

Utilizator filipdanieloanFilip-Daniel Oancea filipdanieloan Data 20 februarie 2026 16:22:34
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;

int n, v[500000];

void quicksort(int st, int dr) {
    if(st >= dr) return;
    int pivot = v[st];
    int nrValSmaller = 0;
    for(int i = st; i <= dr; ++i) {
        if(v[i] < pivot) {
            ++nrValSmaller;
        }
    }

    swap(v[st], v[st + nrValSmaller]);
    for(int i = st, j = dr; i < st + nrValSmaller && j > st + nrValSmaller; ) {
        if(v[i] < pivot) ++i;
        if(v[j] >= pivot) --j;
        if(i < st + nrValSmaller && j > st + nrValSmaller)
            swap(v[i], v[j]);
    }

    quicksort(st, st + nrValSmaller - 1);
    quicksort(st + nrValSmaller + 1, dr);
}

signed main() {
    cin.tie(nullptr)->sync_with_stdio(false);
#ifndef LOCAL
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
#endif

    cin >> n;
    for(int i = 0; i < n; ++i) {
        cin >> v[i];
    }

    mt19937 random(2026);
    shuffle(v, v + n, random);

    quicksort(0, n-1);
    for(int i = 0; i < n; ++i)
        cout << v[i] << ' ';

    return 0;
}