Cod sursa(job #2064638)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 12 noiembrie 2017 17:25:09
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

int n,v[500010];

void swap(int &a,int &b)
{
    int aux;
    aux = a;
    a = b;
    b = aux;
}

int part_Hoare(int st, int dr)
{
    int pivot = st + (rand() % (dr - st + 1));
    int i =  st-1,j = dr + 1;

    while(1)
    {
        do{
            i++;
        }while(v[i] < v[pivot]);

        do{
            j--;
        }while(v[j] > v[pivot]);
        if(i>=j)
            return j;

        swap(v[i],v[j]);
    }
}

void qsort(int st,int dr)
{
    if(st < dr)
    {
        int k = part_Hoare(st,dr);
        qsort(st,k);
        qsort(k+1,dr);
    }
}

int main()
{
    int i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",v+i);

    qsort(1,n);
    for(i=1;i<=n;i++)
        printf("%d ",v[i]);
}