使用c++设计算法完成查找数组里面第k小元素的功能。数组里的第k小元素是指将数组从小到大排序后的第k个元素。
可以使用快速排序算法来解决这个问题。快速排序算法的思想是选择一个基准元素,将小于基准元素的元素放在左边,大于基准元素的元素放在右边,然后递归地对左右两个子数组进行排序。
以下是使用快速排序算法实现查找数组第k小元素的代码:
#include <iostream>
#include <vector>
using namespace std;
// 快速排序函数
int partition(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++;
swap(nums[i], nums[j]);
}
}
swap(nums[i + 1], nums[right]);
return i + 1;
}
int quickSelect(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);
}
}
int findKthSmallest(vector<int>& nums, int k) {
return quickSelect(nums, 0, nums.size() - 1, k - 1);
}
int main() {
vector<int> nums = {5, 2, 9, 1, 7, 6};
int k = 3;
int result = findKthSmallest(nums, k);
cout << "第" << k << "小元素是:" << result << endl;
return 0;
}
这段代码中,partition函数用于将数组分成两部分,小于基准元素的放在左边,大于基准元素的放在右边,并返回基准元素的位置。quickSelect函数通过递归地调用partition函数来寻找第k小的元素。最后,findKthSmallest函数调用quickSelect函数并返回结果。
在上述代码中,我们将数组的下标从0开始计算,因此要找第k小的元素,需要找到下标为k-1的元素。所以,我们调用quickSelect(nums, 0, nums.size() - 1, k - 1)来查找第k小的元素。
以上代码的输出结果为:
第3小元素是:5
这表示将数组{5, 2, 9, 1, 7, 6}从小到大排序后,第3个元素是5
原文地址: http://www.cveoy.top/t/topic/iUCy 著作权归作者所有。请勿转载和采集!