Pagini recente » Cod sursa (job #371824) | Cod sursa (job #3316972) | Cod sursa (job #2890729) | Cod sursa (job #3304876) | Cod sursa (job #3346673)
#include <cstdlib>
#include <ctime>
#include <iostream>
#define NMAX 3000000
int quick_select(int *v, int n, int k)
{
int a;
int j, l, r, m;
l = 0;
r = n - 1;
m = 0;
while (l <= r) {
m = l + (rand() % (r - l + 1));
a = v[m];
v[m] = v[l];
v[l] = a;
m = l;
for (int i = r, d = 0; m < i; m += d, i -= (1 - d))
if (v[m] > v[i]) {
a = v[m];
v[m] = v[i];
v[i] = a;
d = 1 - d;
}
if (m + 1 == k)
return v[m];
else if (m + 1 < k)
l = m + 1;
else
r = m - 1;
}
return v[m];
}
int main()
{
int n, k;
int v[NMAX];
freopen("sdo.in", "r", stdin);
freopen("sdo.out", "w", stdout);
srand(time(nullptr));
std::cin >> n >> k;
for (int i = 0; i < n; ++i)
std::cin >> v[i];
std::cout << quick_select(v, n, k) << '\n';
return 0;
}