Leetcode215. Kth Largest Element in an Array(基于快速排序及其划分算法)(C++实现)

Leetcode215. Kth Largest Element in an Array(基于快速排序及其划分算法)

题目链接

kth-largest-element-in-an-array

实现代码

class Solution {
public:
	//此处划分算法将大于枢轴值得元素移到枢轴左边,反之移动右边
	//非递增排序
    int Partition(vector<int>& v, int low, int high) {
        int pivot = v[low];
        while(low < high) {
            while(low < high && v[high] <= pivot) --high;
            v[low] = v[high];
            while(low < high && v[low] >= pivot) ++low;
            v[high] = v[low];   
        }
        v[low] = pivot;
        return low;
    }

    int Find(vector<int>& v, int low, int high, int k) {
        int pivotpos = Partition(v, low, high);
        if(pivotpos == k) return v[pivotpos];//若找到则返回
        if(pivotpos > k) return Find(v, low, pivotpos - 1,k);//若k小于此时枢轴的下标值,到左边寻找
        else return Find(v, pivotpos + 1, high,k);//若k大于此时枢轴的下标值,到右边寻找
    }

    int findKthLargest(vector<int>& nums, int k) {
        return Find(nums, 0, nums.size() - 1, k - 1);
    }
};

算法实现

根据题目的要求,在无序顺序表中找到并返回第k大的数。本题采用算法基于快速排序,进行非递增排序,每次划分一趟后,枢轴会落在其排序结束后的最终位置,此时只需将k与枢轴下标比较,若大于则向枢轴左边寻找,否则向右边寻找,进行不断划分,直到找到第k大的元素并返回。算法的平均时间复杂度为O(n)。
快速排序C++实现

测试

测试

鸣谢

感谢LeetCode提供题目和测评平台
感谢王道论坛提供的思路

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值