Pagini recente » Monitorul de evaluare | Cod sursa (job #163584) | Cod sursa (job #1996751) | Profil Al3ks1002 | Cod sursa (job #3286937)
#include <fstream>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#define ll long long
using namespace std;
const int NMAX = 5e5;
int v[NMAX + 1];
void quick(int st, int dr)
{
if (st >= dr)
return ;
int i, j = st - 1, putin, mult;
int pivot = st + rand() % (dr - st);
int val = v[pivot];
for (i = st; i <= dr; i++)
if (v[i] <= val)
{
j++;
if (i == pivot)
pivot = j;
swap(v[j], v[i]);
}
swap(v[pivot], v[j]);
pivot = j;
for (j = pivot; v[pivot] == v[j] and j >= st; j--);
putin = j;
for (j = pivot + 1; v[pivot] == v[j] and j <= dr; j++);
mult = j;
quick(st, putin);
quick(mult, dr);
}
int main()
{
ifstream cin("algsort.in");
ofstream cout("algsort.out");
srand(time(0));
int n, i;
cin >> n;
for (i = 1; i <= n; i++)
cin >> v[i];
quick(1, n);
for (i = 1; i <= n; i++)
cout << v[i] << " ";
}