Cod sursa(job #2302782)

Utilizator Casuneanu_StefanCasuneanu Stefan Casuneanu_Stefan Data 15 decembrie 2018 10:09:31
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

#define NMAX 500010
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int v[NMAX], n, i, k;
void quicksort(int v[], int st, int dr);
int partitioneaza(int v[], int st, int dr);

int main()
{
    fin>>n;
    for (i=1; i<=n; i++)
        fin>>v[i];
    quicksort(v, 1, n);
    for (i=1; i<=n; i++)
        fout<<v[i]<<' ';
    fout<<'\n';
    return 0;
}
void quicksort(int v[], int st, int dr)
{
    if (st<dr)
    {
        if (st+k<dr)
        {
            int aux=v[st];
            v[st]=v[st+k];
            v[st+k]=aux;
            k++;
        }
        else
            k=1;
        int poz= partitioneaza (v, st, dr);
        quicksort(v, st, poz-1);
        quicksort(v, poz+1, dr);
    }
}
int partitioneaza(int v[], int st, int dr)
{
    int pivot=v[st];
    while (st<dr)
    {
        while (st<dr && v[dr]>=pivot)
            --dr;
        v[st]=v[dr];
        while (st<dr && v[st]<=pivot)
            ++st;
        v[dr]=v[st];
    }
    v[st]=pivot;
    return st;
}