Cod sursa(job #1337229)

Utilizator stefan1Medvichi Stefan stefan1 Data 8 februarie 2015 19:22:57
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#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();
}