Cod sursa(job #1070555)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 1 ianuarie 2014 15:44:50
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#define Nmax 500005

using namespace std;

int N,a[Nmax];

inline void Read()
{
    ifstream fin("algsort.in");
    fin>>N;
    for(int i=1;i<=N;++i)
        fin>>a[i];
    fin.close();
}

inline int Divide(int st, int dr)
{
    int x=a[st],aux;
    while(st<dr)
    {
        while(st<dr && a[dr]>=x)
            --dr;
        aux=a[st];a[st]=a[dr];a[dr]=aux;
        while(st<dr && a[st]<=x)
            ++st;
        aux=a[st];a[st]=a[dr];a[dr]=aux;
    }
    a[st]=x;
    return st;
}

inline void QSort(int st, int dr)
{
    int m=Divide(st,dr);
    if(m-1>=st)
        QSort(st,m-1);
    if(m+1<=dr)
        QSort(m+1,dr);
}

inline void Write()
{
    ofstream fout("algsort.out");
    for(int i=1;i<=N;++i)
        fout<<a[i]<<" ";
    fout<<"\n";
    fout.close();
}

int main()
{
    Read();
    QSort(1,N);
    Write();
    return 0;
}