Cod sursa(job #2063677)

Utilizator aturcsaTurcsa Alexandru aturcsa Data 11 noiembrie 2017 12:44:18
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <algorithm>
using namespace std;
unsigned int n,a[250005],pivot,a1,a2;
void qsort(int st,int dr)
{
    pivot=(st+dr)/2;//pivot=rand()%(dr-st+1)+st;
//    if(n%2==0&&(pivot >n/2)) qsort(st,pivot);
//    if(n%2==1&&(pivot >(n+1)/2)) qsort(st,pivot);
    if(st==dr)return;
    cout<<pivot;
    for(int i=st;i<=dr;i++)
    {
        if(a[pivot]<a[i]&&pivot>i)
            swap(a[pivot],a[i]),pivot=i;
        if(a[pivot]>a[i]&&pivot<i)
        {
            swap(a[pivot],a[pivot+1]),pivot++;
            if(i-pivot==1)
            swap(a[pivot-1],a[i]);
        }
    }
    for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    cout<<"\n";

    if(n%2==1)
    {
        if(pivot==((n+1)/2))
        {
            a1=a[pivot];
        }
        return;
    }
    else
    {
        if(pivot==n/2)
            a1=a[pivot];
        if(pivot==n/2+1)
            a2=a[pivot];
        return;
    }
    qsort(pivot+1,dr);
}

int main()
{///timus1306
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    qsort(1,n);
    cout<<a1<<" "<<a2<<" ";
    if(n%2==1)
        cout<<a1;
    else
        cout<<((double)a1+(double)a2)/(double)2;
    return 0;
}