0
点赞
收藏
分享

微信扫一扫

LeetCode-快速排序的应用

洲行 2022-02-12 阅读 61
leetcode

1 快速排序

void qSort(vector<int>& nums, int p, int r)
{
    if (p < r)
    {
        int q = partition(nums,p,r);
        qSort(nums,p,q-1);
        qSort(nums,q+1,r);
    }
}

int partition(vector<int>& nums, int p, int r)
{
    int x = nums[r];
    int j = p-1;
    for(int i=p;i<=r-1;++i)
    {
        if (nums[i] <= x)
            std::swap(nums[++j], nums[i]);
    }
    std::swap(nums[++j], nums[r]);
    
    return j;
}

2 题目

2.1 数组中的第K个最大元素

215. 数组中的第K个最大元素

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        return partition(nums, 0, nums.size()-1, k);
    }

    //第K(K从1开始索引)大就是第 size+1-K 小
    //对应的从0开始的索引就是 size-K
    int partition(vector<int>& nums, int p, int r, int k)
    {
        int x = nums[r];
        int j = p-1;
        for(int i=p;i<=r-1;++i)
        {
            if (nums[i] <= x)
                std::swap(nums[++j], nums[i]);
        }
        std::swap(nums[++j], nums[r]);
        
        if (j < nums.size() - k)
        {
            return partition(nums, j+1, r, k);
        }
        else if (j > nums.size() - k)
        {
            return partition(nums, p, j-1, k);
        }
        else
        {
            return nums[j];
        }
    }
};

2.2

2.3

2.4

2.5

举报

相关推荐

0 条评论