Cod sursa(job #3339042)

Utilizator TimofeiFilipTimofei Filip Emanuel TimofeiFilip Data 5 februarie 2026 21:35:14
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include<bits/stdc++.h>
#pragma GCC optimise("Ofast, O3, unroll-loops")
using namespace std;


void QuickSort(vector<int> &v, int left, int right){
    if (left >= right) return;
    int pivot = v[left];
    int valori_mai_mici = 0;
    for(int i = left; i <= right; i++){
        valori_mai_mici += (v[i] < pivot);
    }
    int pivot_position = left + valori_mai_mici;
    swap(v[left], v[pivot_position]);

    int left_position = left, right_position = right;
    while (left_position < pivot_position && right_position > pivot_position) {
        while (v[left_position] < pivot)
            left_position++;
        while (v[right_position] >= pivot)
            right_position--;
        if (left_position < pivot_position && right_position > pivot_position) {
            swap(v[left_position], v[right_position]);
        }
    }
    QuickSort(v, left, left + valori_mai_mici - 1);
    QuickSort(v, left + valori_mai_mici + 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]);
    }
    random_shuffle(v.begin() + 1, v.end());
    random_shuffle(v.begin() + 1, v.end());
    QuickSort(v, 1, n);

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