Pagini recente » Cod sursa (job #1884884) | Cod sursa (job #1302050) | Cod sursa (job #1597975) | Cod sursa (job #579331) | Cod sursa (job #2897331)
#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)
{
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() {
srand(time(NULL));
Read_Solve();
return 0;
}