Cod sursa(job #2378090)

Utilizator dragostanTantaru Dragos Constantin dragostan Data 11 martie 2019 17:23:54
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <stdlib.h>
#include <time.h>

using namespace std;
const int DIM = 3000001;
ifstream cin("sdo.in");
ofstream cout("sdo.out");

int sir[DIM];
int partitie(int, int);
void qs(int, int, int);
int n, k;
int main()
{
    srand(time(0));
    cin >> n >> k;
    for(int i = 1; i <= n; ++i)
    {
        cin >> sir[i];
    }

    for(int i = n; i > 1; --i)
    {
        int p = rand() % i + 1;
        swap(sir[i - 1], sir[p]);
    }
    qs(1, n, k);
    cout << sir[k];
    return 0;
}

void qs(int st, int dr, int k)
{
    if(st >= dr)
    {
        return;
    }
    int m = partitie(st, dr);
    if(k < m)
    {
        qs(st, m - 1, k);
    }
    if(k > m)
    {
        qs(m + 1, dr, k);
    }
}

int partitie(int st, int dr)
{
    int m = st;
    for(int i = st; i < dr; ++i)
    {
        if(sir[i] < sir[dr])
            swap(sir[i], sir[m++]);
    }
    swap(sir[m], sir[dr]);
    return m;
}