Cod sursa(job #3003730)

Utilizator AndreiKatsukiAndrei Dogarel AndreiKatsuki Data 15 martie 2023 21:34:53
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

int a[500005];

void median_of_three(int a[], int st, int dr){
    int mij = st + (dr - st) / 2;
    if(a[st] > a[mij]){
        swap(a[st], a[mij]);
    }
    if(a[st] > a[dr]){
        swap(a[st], a[dr]);
    }
    if(a[mij] > a[dr]){
        swap(a[mij], a[dr]);
    }
    swap(a[mij], a[dr - 1]);
}

int partition_vec(int a[], int st, int dr){
    median_of_three(a, st, dr);
    int pivot = a[dr];
    int i = st - 1;
    for(int j = st; j <= dr; ++j){
        if(a[j] < pivot){
            swap(a[++i], a[j]);
        }
    }
    swap(a[i + 1], a[dr]);
    return (i + 1);
}

void quicksort(int a[], int st, int dr){
    if(st < dr){
        int pi = partition_vec(a, st, dr);
        quicksort(a, st, pi - 1);
        quicksort(a, pii + 1, dr);
    }
}

int main(){
    int n;
    f >> n;
    for(int i=1;i<=n;++i){
        f >> a[i];
    }
    quicksort(a, 1, n);
    for(int i=1;i<=n;++i){
        g << a[i] << " ";
    }
    return 0;
}