Cod sursa(job #2897328)

Utilizator AndreiJJIordan Andrei AndreiJJ Data 3 mai 2022 14:50:13
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <random>
#include <time.h>

using namespace std;

int FixPartition(vector <int> &v, int left, int right)
{
    int pivot = v[right], i = left - 1;
    for (int j = left; j < right; j++)
        if (v[j] <= pivot)
            swap(v[++i], v[j]);
    swap(v[i + 1], v[right]);
    return i + 1;
}

int RandomPartition(vector <int> &v, int left, int right)
{
    srand(time(NULL));
    int rand_index = left + rand() % (right - left);
    swap(v[rand_index], v[right]);
    return FixPartition(v, left, right);
}

void QuickSort(vector <int> &v, int left, int right)
{
    if (left >= right)
        return;
    int part_index = RandomPartition(v, left, right);
    QuickSort(v, left, part_index - 1);
    QuickSort(v, part_index + 1, right);
}

void Read_Solve()
{
    ifstream fin ("algsort.in");
    int n;
    fin >> n;
    vector <int> v(n);
    for (int i = 0; i < n; i++)
        fin >> v[i];
    QuickSort(v, 0, n - 1);
    ofstream fout ("algsort.out");
    for (auto &it : v)
        fout << it << " ";
    fout.close();
    fin.close();
}

int main() {
    Read_Solve();
    return 0;
}