Cod sursa(job #2871400)

Utilizator preda.andreiPreda Andrei preda.andrei Data 14 martie 2022 17:46:52
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>

using namespace std;

int Partition(vector<int>& vec, int left, int right) {
    auto mid = left + (right - left) / 2;
    swap(vec[left], vec[mid]);

    auto i = left + 1;
    auto j = right;
    while (i <= j) {
        while (i <= j && vec[i] <= vec[left]) {
            i += 1;
        }
        while (i <= j && vec[j] > vec[left]) {
            j -= 1;
        }
        if (i <= j) {
            swap(vec[i], vec[j]);
            i += 1;
            j -= 1;
        }
    }

    swap(vec[left], vec[i - 1]);
    return i - 1;
}

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

    auto mid = Partition(vec, left, right);
    QuickSort(vec, left, mid - 1);
    QuickSort(vec, mid + 1, right);
}

int main() {
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");

    int n;
    fin >> n;

    vector<int> vec(n);
    for (auto& num : vec) {
        fin >> num;
    }

    QuickSort(vec, 0, vec.size() - 1);

    for (const auto& num : vec) {
        fout << num << " ";
    }
    fout << "\n";
    return 0;
}