Pagini recente » Cod sursa (job #2660577) | Cod sursa (job #726622) | Cod sursa (job #3179527) | Cod sursa (job #2802475) | Cod sursa (job #728882)
Cod sursa(job #728882)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int n, k, i;
int data[3000001];
int part(int inf, int sup) {
int pivot = data[inf + rand() % (sup - inf + 1)];
int i = inf - 1, j = sup + 1;
while (1) {
do {
i++;
} while(data[i] < pivot);
do {
j--;
} while(data[j] > pivot);
if (i >= j)
return j;
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
return -1;
}
int elem = -1;
void kthelem(int inf, int sup, int k) {
if(inf == sup)
return;
int q = part(inf, sup);
int t = q - inf + 1;
if(t >= k)
kthelem(inf, q, k);
else
kthelem(q+1, sup, k-t);
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand ( time(NULL) );
scanf("%d %d", &n, &k);
for (i = 0; i < n; i++) {
scanf("%d", &data[i + 1]);
}
kthelem(1, n, k);
printf("%d\n", data[k]);
return 0;
}