Cod sursa(job #2871405)

Utilizator preda.andreiPreda Andrei preda.andrei Data 14 martie 2022 17:55:28
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 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 - 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(int left, int right) {
    if (left >= right) {
        return;
    }

    auto mid = Partition(left, right);
    QuickSort(left, mid - 1);
    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;
}