Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdlib>
- using namespace std;
- int Partition(vector<int> &vec, int N, int k_static){
- int first_elem = 0;
- int last_elem = N - 1;
- int i = 0, j = 0;
- while (1){
- int pivot_pos = rand() % (last_elem - first_elem + 1 ) + (first_elem);
- i = first_elem, j = first_elem;
- swap(vec[last_elem], vec[pivot_pos]);
- for (; j != last_elem;){
- if (vec[j] < vec[last_elem]){
- swap(vec[j], vec[i]);
- i++;
- }
- j++;
- }
- swap(vec[last_elem], vec[i]);
- if (i < k_static){
- first_elem = i + 1;
- last_elem;
- }
- else if (i == k_static){
- return vec[i];
- }
- else{
- first_elem = 0;
- last_elem = i - 1;
- }
- }
- }
- int main(){
- int N = 0;
- cin >> N;
- int k_static = 0;
- cin >> k_static;
- vector<int> vect(N);
- for (int i = 0; i < N; i++){
- cin >> vect[i];
- }
- int answer = Partition(vect, N, k_static);
- cout << answer;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement