Cod sursa(job #1625059)

Utilizator andreitulusAndrei andreitulus Data 2 martie 2016 16:17:30
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#include<algorithm>
#include<cstdio>
#include<ctime>
#define maxn 500003
using namespace std;

int n,k;
int a[maxn];

void read()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
}

int position(int left,int right)
{
    int i=left,j=right;
    int pivot=rand()%(right-left)+left;
    swap(a[left],a[pivot]);

    while(i<j)
    {
        while(a[i]<=a[j] && i<j)
            j--;

        if(i<j)
        swap(a[i],a[j]),i++;

        while(a[i]<=a[j] && i<j)
                i++;

            if(i<j)
            swap(a[i],a[j]),j--;
    }
    return i;
}

void quick(int left,int right)
{
    if(left==right)  return;
    int p=position(left,right);

    quick(left,p-1);
    quick(p+1,right);
}

int main()
{
    int i;

    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    srand(time(0));
    read();
    quick(1,n);

   //printf("%d",a[k]);

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

    fclose(stdin);
    fclose(stdout);
    return 0;
}