Pagini recente » Cod sursa (job #2473164) | Cod sursa (job #1315268) | Cod sursa (job #791334) | Cod sursa (job #2216172) | Cod sursa (job #1993425)
#include <iostream>
#include <fstream>
#include <utility>
#include <vector>
#include <cstdlib>
#include <ctime>
int part(int left, int right, std::vector<int> &myV) {
int pivot = left + rand() % (right - left);
int ind = left;
std::swap(myV[pivot], myV[right]);
for (int i(left); i < right; i++) {
if (myV[i] < myV[right]) {
std::swap(myV[ind], myV[i]);
ind++;
}
}
std::swap(myV[right], myV[ind]);
return ind;
}
int select(int left, int right, int k, std::vector<int> &myV) {
if (left >= right) {
return myV[left];
}
int ind = part(left, right, myV);
if (k == ind) {
return myV[k];
} else if (k < ind) {
return select(left, ind - 1, k, myV);
}
return select(ind + 1, right, k, myV);
}
int main() {
std::srand(std::time(nullptr));
std::ifstream fileIn("sdo.in");
std::ofstream fileOut("sdo.out");
int nV, k;
fileIn >> nV >> k;
std::vector<int> myV(nV);
for (int i(0); i < nV; i++) {
fileIn >> myV[i];
}
fileOut << select(0, nV - 1, k, myV);
fileIn.close();
fileOut.close();
return 0;
}