Cod sursa(job #1016065)

Utilizator smaraldaSmaranda Dinu smaralda Data 25 octombrie 2013 17:56:33
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
#include<stdlib.h>

int k,a[3000010];

void swap (int &x, int &y) {
    int aux = x;
    x = y;
    y = aux;
}

void ord (int st, int dr) {
    if(st >= dr)
        return ;
    int pivot,i,j;

    pivot = a[st + rand() % (dr-st+1)];

    i = st;
    j = dr;
    while(i <= j) {
        while(a[i] < pivot)
            i++;
        while(a[j] > pivot)
            j--;
        if(i <= j)
            swap(a[i],a[j]),
            ++i,
            --j;
        }

    if(k <= j)
        ord(st, j);
    else
        ord(i,dr);
}

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

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

    ord(1,n);

    printf("%d\n",a[k]);
    return 0;
}