Cod sursa(job #1233375)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 25 septembrie 2014 11:08:53
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

int n, i, v[500005];

void change(int a, int b)
{
    int c=v[a];
    v[a]=v[b];
    v[b]=c;
}

int qsrt(int x, int st, int dr)
{
    if(st==dr) return st;

    if(x==st)
    {
        if(v[x]<=v[dr]) return qsrt(x, st, dr-1);
        else
        {
            change(x, dr);
            return qsrt(dr, st, dr);
        }
    }
    else
    {
        if(v[x]>=v[st]) return qsrt(x, st+1, dr);
        else
        {
            change(st, x);
            return qsrt(st, st, dr);
        }
    }
}

void quick(int st, int dr)
{
    if(st==dr||st>dr) return ;
    int poz=qsrt(st, st, dr);
    quick(st, poz-1);
    quick(poz+1, dr);
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for(i=1;i<=n;i++)
        scanf("%d", &v[i]);
    quick(1, n);
    for(i=1;i<=n;i++)
        printf("%d ", v[i]);
    return 0;
}