Pagini recente » Cod sursa (job #431944) | Cod sursa (job #826547) | Cod sursa (job #171826) | Cod sursa (job #1559890) | Cod sursa (job #526513)
Cod sursa(job #526513)
#include<cstdio>
#include<cstdlib>
const int NMax = 3000000;
int a[NMax], k, n;
void swap(int i, int j){
int aux = a[i];
a[i] = a[j];
a[j] = aux;
}
int partition(int left, int right){
int poz = rand() % (right-left) + left;
swap(left, poz);
int el = a[left];
int i = left;
for (int j = left + 1; j < right; j++) {
if (a[j] <= el){
i++;
swap(i,j);
}
}
swap(left, i);
return i;
}
int qSort(int left, int right, int k) {
if (left < right) {
int q = partition(left, right);
int poz = q - left + 1;
if (poz == k) return a[q];
else if (k < poz) return qSort(left, q, k);
else return qSort(q+1, right, k-poz);
}
}
int main() {
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
scanf("%d %d", &n, &k);
for (int i = 0; i < n ; i++) {
scanf("%d ", &a[i]);
}
printf("%d\n", qSort(0, n, k));
return 0;
}