Pagini recente » Cod sursa (job #2610741) | Cod sursa (job #3171669) | Cod sursa (job #3294206) | Cod sursa (job #3257655) | Cod sursa (job #3179599)
#include <set>
#include <iostream>
#include <vector>
#include <array>
#include <queue>
#include <unordered_map>
#include <bitset>
#include <algorithm>
#include <iomanip>
#define INF 1e9
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
pii partition(vector <int> &a, int l, int r)
{
int sz = r - l + 1;
int m = l + rand() % sz; // 0..(sz - 1)
int m_item = a[m];
int m_count = 0;
vector <int> lower;
vector <int> higher;
for (int i = l; i <= r; i++)
if (a[i] < m_item) lower.push_back(a[i]); else
if (a[i] > m_item) higher.push_back(a[i]); else
m_count++;
int x = l, pos = l;
for (int i = 0; i < lower.size(); i++) a[x++] = lower[i];
for (int i = 0; i < m_count; i++) a[x++] = m_item;
for (int i = 0; i < higher.size(); i++) a[x++] = higher[i];
return { l + lower.size(), r - higher.size() };
}
void quick_sort(vector <int> &a, int l, int r)
{
if (l >= r) return;
pii pivot = partition(a, l, r);
quick_sort(a, l, pivot.first - 1);
quick_sort(a, pivot.second + 1, r);
}
int main()
{
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
cin >> n;
vector <int> in(n);
for (int i = 0; i < n; i++) cin >> in[i];
quick_sort(in, 0, n - 1);
for (auto item: in) cout << item << ' ';
return 0;
}