Cod sursa(job #2900136)

Utilizator alex_bb8Banilean Alexandru-Ioan alex_bb8 Data 10 mai 2022 13:55:17
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

//ifstream f("D:/Proiecte/Clion/Projects/hashuri.in");
//ofstream g("D:/Proiecte/Clion/Projects/hashuri.out");

int n, v[500005];

int pivot(int v[], int s, int d){
    int mid = (s + d)/2;

    //median of s, mid, d
    if(v[mid] < v[s])
        swap(v[s], v[mid]);
    if(v[d] < v[s])
        swap(v[s], v[d]);
    if(v[mid] < v[d])
        swap(v[mid], v[d]);

    // Lomuto classic partition

    int piv_element = v[d];
    int piv_index = s - 1;

    for(int j = s; j < d; ++j)
        if(v[j] <= piv_element) {
            ++piv_index;
            swap(v[piv_index], v[j]);
        }

    ++piv_index;
    swap(v[piv_index], v[d]);

    return piv_index;
}

void QuickSort(int v[], int s, int d){
    if(s < d){
        int piv = pivot(v, s, d);
        QuickSort(v, s, piv - 1);
        QuickSort(v, piv + 1, d);
    }
}

int main(){

    f >> n;
    for(int i = 0; i < n; ++i)
        f >> v[i];

    QuickSort(v, 0, n - 1);

    for(int i = 0; i < n; ++i)
        g << v[i] << ' ';

    f.close();
    g.close();

    return 0;
}