Cod sursa(job #1247777)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 23 octombrie 2014 19:41:33
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>

using namespace std;

#define nmax 500005

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int n;
int V[nmax];
int i;

void read()
{
    fin >> n;
    for (i=1; i<=n; i++)
        fin >> V[i];
}

void suffle()
{
    for (i=1; i<=n; i++)
       swap(V[i], V[i-min(i, V[i])+1]);
}

void qs(int st, int dr)
{
    int i, j;
    bool dir;
    
    if (st < dr)
    {
        i = st;
        j = dr;
        dir = true;
        while (i != j)
        {
            if (dir)
            {
                if (V[i] <= V[j])
                    i++;
                else
                    swap(V[i], V[j]),
                    dir = false,
                    j--;
            }
            else
            {
                if (V[i] <= V[j])
                    j--;
                else
                    swap(V[i], V[j]),
                    dir = true,
                    i++;
            }
        }
        qs(st, i-1);
        qs(i+1, dr);
    }
}

void write()
{
    for (i=1; i<=n; i++)
        fout << V[i] << " ";
    fout << "\n";
}

int main()
{
    
    read();
    suffle();
    qs(1, n);
    write();
    
    fin.close();
    fout.close();
    
    return 0;
}