Pagini recente » Cod sursa (job #1873675) | Cod sursa (job #2120592) | Cod sursa (job #2991121) | Cod sursa (job #416423) | Cod sursa (job #1868343)
#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
ifstream in ("sdo.in");
ofstream out("sdo.out");
int n, k;
int v[3000001];
int partition(int v[], int left, int right) {
int i = left - 1 , j = right + 1;
int random = left + (rand() % (right - left + 1));
int pivot = v[random];
while (1)
{
do
{
++i;
}
while (v[i] < pivot);
do
{
--j;
}
while (pivot < v[j]);
if (i < j)
swap(v[i], v[j]);
else
return i;
}
return 0;
}
void quicksort(int v[], int left, int right, int k) {
if (left == right) return;
int index = partition(v, left, right);
int t = index - left + 1;
if (t >= k)
quicksort(v, left, index, k);
else
quicksort(v, index + 1, right, k - t);
}
int main()
{
srand(time(NULL));
in >> n >> k;
for (int i = 1; i <= n; i++) {
in >> v[i];
}
quicksort(v, 1, n, k);
out << v[k];
}