Cod sursa(job #3341855)

Utilizator pepsiM4A1Ozturk Arif pepsiM4A1 Data 21 februarie 2026 13:12:03
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include<bits/stdc++.h>
#include<random>
#pragma GCC optimise("Ofast, O3, unroll-loops")
using namespace std;

int partition(vector<int> &v, int left, int right) {
    int pivot = v[left + rand() % (right - left + 1)];
    int i = left - 1;
    int j = right + 1;

    while (true) {
        do {
            i++;
        } while (v[i] < pivot);

        do {
            j--;
        } while (v[j] > pivot);

        if (i >= j)
            return j;

        swap(v[i], v[j]);
    }
}

void QuickSort(vector<int> &v, int left, int right) {
    if (left >= right) return;

    int p = partition(v, left, right);
    QuickSort(v, left, p);
    QuickSort(v, p + 1, right);
}

int main(){
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);


    int n;
    scanf("%d", &n);

    vector<int> v(n + 1, 0);
    for(int i = 1; i <= n; i++){
        scanf("%d", &v[i]);
    }
    srand(time(NULL));

    for (int i = 1; i <= n; ++i) {
        int poz_aleatoare = rand() % i + 1; // [1, i]
        swap(v[i], v[poz_aleatoare]);
    }

    QuickSort(v, 1, n);

    for(int i = 1; i <= n; i++){
        printf("%d ", v[i]);
    }
    return 0;
}