#include <iostream>
#include <vector>
#include <algorithm>
int partition(std::vector<int>& nums, int left, int right) {
int pivot = nums[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (nums[j] < pivot) {
//i增加,并与i位置的元素交换
i++;
std::swap(nums[i], nums[j]);
}
}
std::swap(nums[i + 1], nums[right]);
// 返回基准元素的最终位置
return i + 1;
}
int quickSelect(std::vector<int>& nums, int left, int right, int k) {
if (left == right) return nums[left];
int pivotIndex = partition(nums, left, right);
if (k == pivotIndex) {
return nums[k];
} else if (k < pivotIndex) {
return quickSelect(nums, left, pivotIndex - 1, k);
} else {
return quickSelect(nums, pivotIndex + 1, right, k);
}
}
// 找到数组中第k小的元素的函数
int findKthSmallest(std::vector<int>& nums, int k) {
int n = nums.size();
// 调用快速选择算法,找到第k小的元素
return quickSelect(nums, 0, n - 1, k - 1);
}
int main() {
std::vector<int> nums;
int n, k;
std::cout << "输入数组中的元素数量为: ";
std::cin >> n;
std::cout << "数组中的元素为: ";
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
nums.push_back(num);
}
std::cout << "输入k的值: ";
std::cin >> k;
// 输出第k小的元素
std::cout << k << "最小的元素是: " << findKthSmallest(nums, k) << std::endl;
return 0;
}