Cod sursa(job #1606197)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 20 februarie 2016 00:18:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

#define Nmax 500005

using namespace std;
int N;
int D[Nmax];

void Partition(int li,int lf,int index, int &st, int &dr)
{
    swap(D[index],D[lf]);
    for(int i = li ; i < lf; ++i)
    {
        if(D[i] < D[lf])
            swap(D[i], D[li++]);
        if(D[i] > D[lf])
        {
            swap(D[i], D[lf--]);
            swap(D[i--], D[lf]);
        }
    }
    st = li;
    for(int i = li; i < lf; ++i)
        if(D[i] == D[lf])
            swap(D[i], D[li++]);
    swap(D[li],D[lf]);
    dr = li;
}

void Quicks(int li,int lf)
{
    if(li >= lf)
        return;
    int piv =li + rand() % (lf - li + 1), st,dr;
    Partition(li,lf,piv,st,dr);
    Quicks(li,st - 1);
    Quicks(dr + 1, lf);
}

int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

    scanf("%d",&N);
    for(int i = 1; i <= N; ++i)
        scanf("%d",&D[i]);
    srand(unsigned(time(0)));
    Quicks(1,N);
    for(int i = 1; i <= N; ++i)
        printf("%d ",D[i]);

    return 0;
}