Cod sursa(job #2292837)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 30 noiembrie 2018 01:24:14
Problema Statistici de ordine Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <time.h>

using namespace std;

long long pivot (long long *v, long long st, long long dr)
{
    long long x1 ,x2, x3 ,y = dr - st + 1 ;

    x1 = rand() % y + st;
    x2 = rand() % y + st;
    x3 = rand() % y + st;

    if(v[x1] <= v[x2] && v[x1] <= v[x3])
    {
        if( v[x2] <= v[x3])
            return v[x2];
        return v[x3];
    }
    if(v[x2] <= v[x1] && v[x2] <= v[x3])
    {
        if( v[x3] <= v[x1])
            return v[x3];
        return v[x1];
    }

    if(v[x3] <= v[x1] && v[x3] <= v[x2])
    {
        if( v[x2] <= v[x1])
            return v[x2];
        return v[x1];
    }
}

void QuickSort ( long long *v ,long long st, long long dr)
{
    if ( st >= dr )
        return;
    long long p = pivot (v, st, dr);
    long long i = st , j = dr;
    while ( i <=j)
    {
        while ( v[i] < p )
            i++;
        while ( v[j] > p)
            j--;
        if( i<= j)
        {
            swap(v[i], v[j]);
            i++;
            j--;
        }
    }

    QuickSort(v, st ,j);
    QuickSort (v, i, dr);
}

int main()
{
    ifstream in ( "sdo.in");
    ofstream out ("sdo.out");

    long long n, i, k, *v;

    in >> n >> k;
    v = new long long [n+1];
    for ( i =0 ; i< n ; i++)
        in >> v[i];

	srand(time(NULL));

    QuickSort (v, 0, n-1);

    out << v[k-1];

    in.close();
    out.close();

    return 0;
}