Cod sursa(job #3238367)

Utilizator filipinezulBrain Crash filipinezul Data 24 iulie 2024 18:04:14
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <bits/stdc++.h>
using namespace std;

class Task { 
 public:
    void solve() {
        read_input();
        get_result();
        print_output();
    }

 private:
    int n;
    vector<int> v;

    void read_input() {
        ifstream fin("algsort.in");
        fin >> n;
        
        v.resize(n);

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

        fin.close();
    }

    void threeWayPartition(int low, int high, int &lt, int &gt) {
        int pivot = v[low];
        lt = low;
        gt = high;
        int i = low;

        while (i <= gt) {
            if (v[i] < pivot) {
                swap(v[lt], v[i]);
                lt++;
                i++;

            } else if (v[i] > pivot) {
                swap(v[i], v[gt]);
                gt--;

            } else {
                i++;
            }
        }
    }

    void quickSort(int low, int high) {
        if (low >= high) {
            return;
        }

        int lt, gt;
        threeWayPartition(low, high, lt, gt);

        quickSort(low, lt - 1);
        quickSort(gt + 1, high);
    }

    void get_result() {
        quickSort(0, n - 1);
    }

    void print_output() {
        ofstream fout("algsort.out");
        
        for (int i = 0; i < n; i++) {
            fout << v[i] << " ";
        }
        
        fout.close();
    }
};

int main(void) {
    ios::sync_with_stdio(false);
    Task task;
    task.solve();
    return 0;
}