Pagini recente » Cod sursa (job #2108549) | Cod sursa (job #3329002) | Cod sursa (job #1287899) | Cod sursa (job #23570) | Cod sursa (job #3347358)
#include <cstdlib>
#include <ctime>
#include <iostream>
#define NMAX 3000000
int quick_select(int *v, int n, int k)
{
int a, pivot;
int l, r, i, j;
l = 0;
r = n - 1;
while (l < r) {
i = l + (rand() % (r - l + 1));
pivot = v[i];
a = v[i];
v[i] = v[r];
v[r] = a;
for (i = l, j = l; j < r; ++j)
if (v[j] < pivot) {
a = v[i];
v[i] = v[j];
v[j] = a;
++i;
}
a = v[i];
v[i] = v[r];
v[r] = a;
if (i == k - 1)
return v[i];
else if (i < k - 1)
l = i + 1;
else
r = i - 1;
}
return v[k - 1];
}
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;
}