Cod sursa(job #2064668)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 12 noiembrie 2017 17:45:13
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <cstdio>
#include <cstdlib>
using namespace std;

int k,n,v[500010];

int part_Hoare(int st, int dr)
{
    int x = (rand() % (dr - st + 1) + rand() % (dr - st + 1) + rand() % (dr - st + 1)) / 3;
    int i = st - 1, j = dr + 1;
    int p = v[x + st];
    while (1) {
        do
            i = i + 1;
        while (v[i] < p);
        do
            j = j - 1;
        while (v[j] > p);
        if (i >= j)
            return j;
        int aux = v[i];
        v[i] = v[j];
        v[j] = aux;
    }
}

void qsort(int st,int dr)
{
    if(st < dr)
    {
        int p = part_Hoare(st,dr);
        if(p==k) return;
        if(p > k) qsort(st,p);
        else qsort(p+1,dr);
    }
}

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

    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
        scanf("%d",v+i);

    qsort(1,n);
    printf("%d",v[k]);
}