Cod sursa(job #3153528)

Utilizator BOSSSTEFANPetrescu Ioan Stefan BOSSSTEFAN Data 30 septembrie 2023 01:47:50
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int v[500001];
int piv(int v[], int st, int dr)
{
    int mij=(st+dr)>>1;
    if(v[st]>v[dr])
        swap(v[st],v[dr]);
    if(v[st]>v[mij])
        swap(v[st],v[mij]);
    if(v[mij]>v[dr])
        swap(v[mij],v[dr]);
    return v[mij];
}
int part(int v[], int st, int dr)
{
    int i,j,mij=piv(v,st,dr);
    for(i=st-1,j=dr+1;;)
    {
        i++;
        j--;
        while(v[i]<mij)
            i++;
        while(v[j]>mij)
            j--;
        if(i>=j)
            return j;
        swap(v[i],v[j]);
    }
}
void qsort(int st, int dr)
{
    if(st<dr)
    {
        int p=part(v,st,dr);
        qsort(st,p);
        qsort(p+1,dr);
    }
}
int main()
{
    int n,i;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    qsort(1,n);
    for(i=1;i<=n;i++)
        cout<<v[i]<<" ";
    return 0;
}