Cod sursa(job #2703529)

Utilizator tavi255Varzaru Octavian Stefan tavi255 Data 8 februarie 2021 18:37:53
Problema Sortare prin comparare Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
using namespace std;

int v[1000005],n;

ifstream in("algsort.in");
ofstream out("algsort.out");

int mediana(int st,int dr)
{

    int mij=((st+dr)>>1);
    if(v[dr]<v[st])
        swap(v[dr],v[st]);
    if(v[mij]<v[st])
        swap(v[mij],v[dr]);
    if(v[dr]<v[mij])
        swap(v[dr],v[mij]);

    return mij;


}


void quick(int st,int dr)
{

    if(st<dr)
    {
        int piv=mediana(st,dr);

        swap(v[dr],v[piv]);

        int i=st-1;

        for(int j=st;j<=dr-1;j++)
            if(v[j]<v[dr])
            {
                i++;
                swap(v[j],v[i]);
            }

        i++;
        swap(v[dr],v[i]);
        quick(st,i-1);
        quick(i+1,dr);
    }

}

int main()
{
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
    quick(1,n);

    for(int i=1;i<=n;i++)
        out<<v[i]<<" ";
    return 0;
}