Advertisement
Guest User

partition epta

a guest
Nov 27th, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.92 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int Partition(vector<int> &vec, int N, int k_static){
  8.     int first_elem = 0;
  9.     int last_elem = N - 1;
  10.     int i = 0, j = 0;
  11.     while (1){
  12.         int pivot_pos = rand() % (last_elem - first_elem + 1  ) + (first_elem);
  13.         i = first_elem, j = first_elem;
  14.         swap(vec[last_elem], vec[pivot_pos]);
  15.         for (; j != last_elem;){
  16.             if (vec[j] < vec[last_elem]){
  17.                 swap(vec[j], vec[i]);
  18.                 i++;
  19.             }
  20.             j++;
  21.         }
  22.         swap(vec[last_elem], vec[i]);
  23.         if (i < k_static){
  24.             first_elem = i + 1;
  25.             last_elem;
  26.         }
  27.         else if (i == k_static){
  28.             return vec[i];
  29.         }
  30.         else{
  31.             first_elem = 0;
  32.             last_elem = i - 1;
  33.         }
  34.     }
  35. }
  36.  
  37. int main(){
  38.     int N = 0;
  39.     cin >> N;
  40.     int k_static = 0;
  41.     cin >> k_static;
  42.     vector<int> vect(N);
  43.     for (int i = 0; i < N; i++){
  44.         cin >> vect[i];
  45.     }
  46.     int answer = Partition(vect, N, k_static);
  47.     cout << answer;
  48.     return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement