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;
}
댓글 0