Pagini recente » Cod sursa (job #750549) | Cod sursa (job #2920043) | Cod sursa (job #3224038) | Rating Burlacu Matei (BurlacuMatei) | Cod sursa (job #883679)
Cod sursa(job #883679)
#include <fstream>
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
//SOLUTION
int partition(std::vector<int>& v, int lower, int upper, int pivot)
{
int i = lower;
int j = upper;
while (true) {
for (; v[i] < pivot; i++);
for (; v[j] > pivot; j--);
if (i < j) {
std::swap(v[i], v[j]);
} else {
break;
}
}
return j;
}
//ENDSOLUTION
int find_kth_min(std::vector<int> &v, int lower, int upper, int k)
{
// TODO Completati codul pentru a afla al k-lea minim din vectorul v
if (lower >= upper) {
return v[upper];
}
int p = partition(v, lower, upper, v[lower]);
if (p == k) {
return v[p];
} else if (p < k) {
return find_kth_min(v, p + 1, upper, k);
} else {
return find_kth_min(v, lower, p - 1, k);
}
}
int main(void) {
//read data
vector <int> v;
int n, k;
ifstream f("sdo.in");
f >> n >> k;
k--;
for (int i = 0; i < n; i++) {
int val;
f >> val;
v.push_back(val);
}
f.close();
//Print results
ofstream g("sdo.out");
g << find_kth_min(v, 0, v.size() - 1, k) << '\n';
g.close();
return 0;
}