题目来源:Lintcode
解题思路:
二基准快速排序,在排序时判断每次找到的标记点下标 p 与 n-k 的大小,若小于n-k,则只需在p的右侧继续递归,若大于 p 则只需在p 的左侧递归,直至 p 与 n-k 相等
vs可运行代码
#include<ctime>
#include<vector>
#include<iostream>
#include<cassert>
#include<string>
using namespace std;
namespace SortTestHelper {
// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
vector<int> generateRandomArray(int n, int rangeL, int rangeR)
{
assert(rangeL <= rangeR);
vector<int> v;
srand(time(NULL));
for (int i = 0; i < n; i++)
v.push_back( rand() % (rangeR - rangeL) + rangeL);
return v;
}
}
class Solution {
public:
/*
* @param n: An integer
* @param nums: An array
* @return: the Kth largest element
*/
int __partition(vector<int> &arr, int