Cod sursa(job #2106937)

Utilizator AlexVulpoiuAlexandru Vulpoiu AlexVulpoiu Data 16 ianuarie 2018 16:12:40
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#include <algorithm>
using namespace std;
int n,i,a[500001];
int poz(int p,int u)
{
    int i,j,k,t;
    i=p;
    j=u;
    t=0;
    k=i;
    while(i<j)
        if(!t)
            if(a[k]<a[j])
                j--;
            else
            {
                swap(a[k],a[j]);
                k=j;
                i++;
                t=1;
            }
        else
            if(a[i]<a[k])
                i++;
            else
            {
                swap(a[i],a[k]);
                k=i;
                j--;
                t=0;
            }
    return k;
}
void quick_sort(int p,int u)
{
    int k;
    if(u-p==1)
    {
        if(a[p]>a[u])
            swap(a[p],a[u]);
    }
    else
        if(p<u)
        {
            k=poz(p,u);
            quick_sort(p,k-1);
            quick_sort(k+1,u);
        }
}
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    quick_sort(1,n);
    for(i=1;i<=n;i++)
        printf("%d ",a[i]);
    printf("\n");
    return 0;
}