Pagini recente » Cod sursa (job #3276851) | Cod sursa (job #3154408) | Cod sursa (job #3154394) | Cod sursa (job #146416) | Cod sursa (job #2452049)
#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] << " ";
}