Cod sursa(job #2276503)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 4 noiembrie 2018 19:53:48
Problema Sortare prin comparare Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<fstream>
#include<random>
#include<ctime>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int partitie(int a[], int st, int dr)
{
    int ra=st+rand()%(dr-st+1);
    int rb=st+rand()%(dr-st+1);
    int rc=st+rand()%(dr-st+1);
    if(a[ra]>a[rb])
    {
        swap(ra,rb);
    }
    if(a[ra]>a[rc])
    {
        swap(ra,rc);
    }
    if(a[rb]>a[rc])
    {
        swap(rb,rc);
    }
    int poz=rb;
    swap(a[dr],a[poz]);
    int pivot=a[dr];
    int i=st-1;
    int j=dr+1;
    while(1)
    {
        do
        {
            i++;
        }
        while(a[i]<pivot);
        do
        {
            j--;
        }
        while(a[j]>pivot);
        if(i>=j)
        {
            return j;
        }
        swap(a[i],a[j]);
    }
}
void qs(int a[], int st, int dr)
{
    if(st<dr)
    {
        int piv=partitie(a,st,dr);
        qs(a,st,piv);
        qs(a,piv+1,dr);
    }
}
int n,i,a[50005];
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    srand(time(NULL));
    qs(a,1,n);
    for(i=1;i<=n;i++)
    {
        fout<<a[i]<<" ";
    }
    fin.close();
    fout.close();
    return 0;
}