Pagini recente » Cod sursa (job #661018) | Cod sursa (job #2169237) | Cod sursa (job #1433211) | Cod sursa (job #2747031) | Cod sursa (job #1337229)
#include <fstream>
#include <cstdlib>
#define DMAX 500002
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n;
int a[DMAX];
void citire(), Qsort(int st, int dr), afisare();
int Divide(int st, int dr);
int main()
{
citire();
Qsort(1, n);
afisare();
return 0;
}
int Divide(int st, int dr)
{
int v=a[st];
while (st<dr)
{
// liber la stanga
// caut in dr un element mai mic decat v
while (st<dr && a[dr]>=v) --dr;
a[st]=a[dr];
// liber la dr
// caut in stanga un element mai mare decat v
while (st<dr && a[st]<=v) ++st;
a[dr]=a[st];
}
a[st]=v;
return st;
}
void Qsort(int st, int dr)
{
if (dr-st>0)
{
int poz=Divide(st, dr);
Qsort(st, poz-1);
Qsort(poz+1, dr);
}
}
void citire()
{
int i;
fin>>n;
for (i=1; i<=n; i++) fin>>a[i];
}
void afisare()
{
int i;
for (i=1; i<=n; i++) fout<<a[i]<<' ';
fout.close();
}