Cod sursa(job #2278022)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 7 noiembrie 2018 10:29:26
Problema Sortare prin comparare Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <fstream>
#include <cstdlib>
#define nmax 500005
using namespace std;

int selectpivot(int v[],int st,int dr)
{
    int i= st, j= dr;
    int p= st+ rand()% (dr- st +1);
    swap(v[i], v[p]);
    while (1) {
        if (v[i]>v[j]) {
            swap(v[j], v[i+1]);
            swap(v[i], v[i+1]);
            i++;
        }
        else j--;

        if (i>=j)
            return i;
    }
}
void qsort(int v[], int st, int dr)
{
    int p=selectpivot(v, st, dr);
    if (st<p)
        qsort(v, st, p);
    if (p+1<dr)
        qsort(v, p+1, dr);
}
int main()
{
    int n, i, j, v[nmax]={0};
    freopen("algsort.in", "r" , stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for (i= 1; i<= n; i++)
        scanf("%d",&v[i]);

    qsort(v, 1, n);

    for (i= 1; i<= n; i++)
        printf("%d ", v[i]);

    return 0;

}