Pagini recente » Cod sursa (job #2026352) | Borderou de evaluare (job #2051221) | Cod sursa (job #1652766) | Cod sursa (job #2819345) | Cod sursa (job #766070)
Cod sursa(job #766070)
/*
Statistici de ordine.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXN 3000000
int n, k;
int vector[MAXN];
void interschimb (int *a, int *b) {
int aux;
aux = *a;
*a = *b;
*b = aux;
}
int partitie (int st, int dr) {
int i = st - 1;
int j = dr + 1;
int p = vector[st + rand() % (dr - st + 1)];
while (1) {
while (vector[++i] < p)
;
while (vector[--j] > p)
;
if (i < j)
interschimb(&vector[i], &vector[j]);
else
return j;
}
return 0;
}
void gaseste_element (int st, int dr) {
if (st >= dr)
return;
int pivot = partitie(st, dr);
gaseste_element(st, pivot);
gaseste_element(pivot + 1, dr);
}
int main () {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
int i;
scanf("%d %d", &n, &k);
for (i = 1; i <= n; i++)
scanf("%d", &vector[i]);
srand(time(NULL));
gaseste_element(1, n);
printf("%d\n", vector[k]);
return 0;
}