本文已参与「新人创作礼」活动,一起开启掘金创作之路。
215. 数组中的第K个最大元素 就这道破题目,调用一个库函数就可以解决的事情,没办法,考察我们的算法能力,所以今天就手撕以下这道快速排序。 明确的步骤我已经放在了代码的注释里,没有想象中的那么难搞,如果实在看不懂的话,我把连接放在这,应该对你们理解快排有好处。 ==如果不懂请点击这里:==快速排序算法
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
quick_sort(nums, 0, nums.size() - 1);
//sort(nums.begin(), nums.end());
return nums[nums.size() - k];
}
//快速排序
// 1.选定pivot中心轴
// 2.将大于Pivot的数字放在Pivot的右边
// 3.将小于Pivot的数字放在Pivot的左边
// 4.分别对左右子序列重复前三部操作,直到左右指针重合
void quick_sort(vector<int>& nums, int L, int R) {
if(L >= R) {
return;
}
int left = L, right = R;
int pivot = nums[left];
while(left < right) {
while(left < right && nums[right] >= pivot) {
right--;
}
if(left < right) {
nums[left] = nums[right];
}
while(left < right && nums[left] < pivot) {
left++;
}
if(left < right) {
nums[right] = nums[left];
}
if(left >= right) {
nums[left] = pivot;
}
}
quick_sort(nums, L, right - 1);
quick_sort(nums, right + 1, R);
}
};