Pagini recente » Cod sursa (job #75142) | Cod sursa (job #557241) | Cod sursa (job #2703023) | Cod sursa (job #2701653) | Cod sursa (job #3000790)
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int MAXN = 500001;
int v[MAXN];
int dr[MAXN];
int st[MAXN];
int mij[MAXN];
int n;
void quicksort(int spos = 0, int dpos = n - 1)
{
if (spos >= dpos)
return;
int m = 0, s = 0, d = 0;
int p = v[spos];
for (int i = spos; i <= dpos; i++)
{
if (v[i] > p)
dr[d++] = v[i];
if (v[i] < p)
st[s++] = v[i];
if (v[i] == p)
mij[m++] = v[i];
}
int k = 0;
for (int i = spos; i < spos + s; i++)
{
v[i] = st[k++];
}
k = 0;
for (int i = spos + s; i < spos + s + m; i++)
{
v[i] = mij[k++];
}
k = 0;
for (int i = spos + s + m; i < spos + s + d + m; i++)
{
v[i] = dr[k++];
}
quicksort(spos, spos + s - 1);
quicksort(spos + s + m, dpos);
}
int main()
{
in >> n;
for (int i = 0; i < n; i++)
{
in >> v[i];
}
quicksort();
for (int i = 0; i < n; i++)
{
out << v[i] << " ";
}
}