Pagini recente » Istoria paginii utilizator/zaharieandrei | Diferente pentru utilizator/sandupetrasco intre reviziile 36 si 37 | Cod sursa (job #2364566) | Cod sursa (job #607527) | Cod sursa (job #1557769)
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define MAX 3000005
int n, k, i, a[MAX];
void swap(int* a, int* b){
if(a != b){
*a += *b;
*b = *a - *b;
*a -= *b;
}
}
int partition(int s, int d){
int i, j;
int pivot = s + rand() % (d - s + 1);
swap(a + d, a + pivot);
for(i = s, j = s; j < d; j++)
if(a[j] <= a[d])
swap(a + i++, a + j);
swap(a + i, a + d);
return i;
}
void sort(int s, int d, int k){
if(s == d)
return;
int p = partition(s, d);
int nr = p - s + 1;
if(nr == k)
return;
if(nr > k)
sort(s, p - 1, k);
else
sort(p + 1, d, k - nr);
}
int main(){
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(NULL));
scanf("%d%d", &n, &k);
for(i = 1; i <= n; i++)
scanf("%d", &a[i]);
sort(1, n, k);
printf("%d\n", a[k]);
return 0;
}