Cod sursa(job #2204191)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 14 mai 2018 22:40:12
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <vector>
using namespace std;

int partition(vector<int> *v, int left, int right)
{
    int mid = (left + right) / 2;
    if ((*v)[mid] < (*v)[right]) {
        if ((*v)[left] < (*v)[mid]) {
            swap((*v)[mid], (*v)[right]);
        }
        else if((*v)[left] < (*v)[right]) {
            swap((*v)[left], (*v)[right]);
        }
    }
    else {
        if ((*v)[mid] < (*v)[left]) {
            swap((*v)[mid], (*v)[right]);
        }
        else if((*v)[right] < (*v)[left]) {
            swap((*v)[left], (*v)[right]);
        }
    }

    int pivot = (*v)[right];
    int i = left - 1;
    
    for (int j = left; j < right; ++j) {
        if ((*v)[j] < pivot) {
            ++i;
            swap((*v)[i], (*v)[j]);
        }
    }

    ++i;
    swap((*v)[i], (*v)[right]);

    return i;
}

void quickSort(vector<int> *v, int left, int right)
{
    if (left >= right) {
        return;
    }

    int pivotPos = partition(v, left, right);

    quickSort(v, left, pivotPos - 1);
    quickSort(v, pivotPos + 1, right);
}

int main()
{
    ifstream fin("algsort.in");
    int n;
    fin >> n;
    vector<int> v(n);
    for (int i = 0; i < v.size(); ++i) {
        fin >> v[i];
    }
    fin.close();

    quickSort(&v, 0, n - 1);

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

    return 0;
}