问题描述】 求n个数中第k大的数 【输入形式】 第一行n k,第二行为n个数,都以空格分开 【输出形式】 第k大的数 【样例输入】 10 3 18 21 11 26 12 2 9 33 43 28 【样例输出】 28用c++实现
时间: 2023-11-29 13:05:26 浏览: 44
以下是使用快速选择算法(QuickSelect)的 C++ 实现:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int quickSelect(vector<int>& nums, int left, int right, int k) {
int pivot = nums[left];
int l = left + 1, r = right;
while (l <= r) {
if (nums[l] < pivot && nums[r] > pivot) {
swap(nums[l++], nums[r--]);
}
if (nums[l] >= pivot) {
++l;
}
if (nums[r] <= pivot) {
--r;
}
}
swap(nums[left], nums[r]);
if (r - left + 1 == k) {
return nums[r];
} else if (r - left + 1 > k) {
return quickSelect(nums, left, r - 1, k);
} else {
return quickSelect(nums, r + 1, right, k - (r - left + 1));
}
}
int main() {
int n, k;
cin >> n >> k;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
cin >> nums[i];
}
cout << quickSelect(nums, 0, n - 1, k) << endl;
return 0;
}
```
首先读入 n 和 k,然后读入 n 个数存入 vector nums 中。接着调用 quickSelect 函数,传入 nums、0、n-1 和 k。函数返回第 k 大的数,直接输出即可。
阅读全文