Pagini recente » Cod sursa (job #3260521) | Cod sursa (job #1442404) | Cod sursa (job #34722) | Cod sursa (job #613465) | Cod sursa (job #1868700)
#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 pivot = v[left + rand() % (right - left + 1)];
while (true) {
do { ++i; } while (v[i] < pivot);
do { --j; } while (v[j] > pivot);
if (i < j) {
int aux = v[i];
v[i] = v[j];
v[j] = aux;
}
else return j;
}
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, t - k);
}
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];
}