Cod sursa(job #2871409)

Utilizator preda.andreiPreda Andrei preda.andrei Data 14 martie 2022 18:08:15
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>

using namespace std;

constexpr auto kMaxLen = 500'000;
int vec[kMaxLen];

int Partition(int left, int right) {
    auto mid = (left + right) / 2;
    auto pivot = vec[mid];

    auto i = left - 1;
    auto j = right + 1;

    while (true) {
        do {
            i += 1;
        } while (vec[i] < pivot);
        do {
            j -= 1;
        } while (vec[j] > pivot);

        if (i >= j) {
            return j;
        }
        swap(vec[i], vec[j]);
    }
}

void QuickSort(int left, int right) {
    if (left >= right) {
        return;
    }

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

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

    int n;
    fin >> n;
    for (int i = 0; i < n; i += 1) {
        fin >> vec[i];
    }

    QuickSort(0, n - 1);

    for (int i = 0; i < n; i += 1) {
        fout << vec[i] << " ";
    }
    fout << "\n";
    return 0;
}