Cod sursa(job #2452049)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 29 august 2019 12:46:53
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <random>
#include <fstream>
#include <time.h>
using namespace std;

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

size_t v[500001], N;

void quicksort(size_t left, size_t right)
{
    if(left < right)
    {
       random_device seed;
       mt19937 rng(seed());
       uniform_int_distribution<int> gen(left, right);

       size_t pivotPosition = gen(rng);


       size_t pivotFinalPosition = left;

        for(size_t i = left; i <= right; i++)
        {
            if(i != pivotPosition && v[i] <= v[pivotPosition])
            {
                swap(v[i], v[pivotFinalPosition]);

                if(pivotFinalPosition == pivotPosition) pivotPosition = i;

                pivotFinalPosition++;
            }
        }

        swap(v[pivotFinalPosition], v[pivotPosition]);

        quicksort(left, pivotFinalPosition - 1);
        quicksort(pivotFinalPosition + 1, right);
    }

}


int main()
{
    srand(time(nullptr));

    fin >> N;

    for(size_t i = 1; i <= N; i++) fin >> v[i];

    quicksort(1, N);

    for(size_t i = 1; i <= N; i++) fout << v[i] << " ";
}