高频笔试题_快速排序

238 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

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);
    }
};