https://www.acmicpc.net/problem/11004


#include<iostream>

#include<vector>

#include<algorithm>



using namespace std;


int Partition(int arr[], int start, int end) {

int pivot = arr;

int i;

int index = start;

int temp;


for (i = start; i < end;i++) {

if (arr[i] <= pivot) {

temp = arr[i];

arr[i] = arr[index];

arr[index++] = temp;

}

}


temp = arr[index];

arr[index] = arr;

arr = temp;

if (index + 1 == end)

return index+1;

else

return index;


}


int quickSelect(int arr[], int start, int end, int k) {

int index;

if (start < end) {

index= Partition(arr, start, end);


if (index == k)

return arr[k];

else if (index > k)

quickSelect(arr, start, index - 1, k);

else if (index < k)

quickSelect(arr, index + 1, end, k);

}

}



int main() {

int n, k;

cin >> n>>k;


int* arr = new int[n];


for (int i = 0; i < n;i++)

cin >> arr[i];


cout << quickSelect(arr, 0, n - 1, k-1)<<"\n";


return 0;

}