标签:right int 元素 mid partition 获取 数组 pivot left
//升序排列
template <typename Comparable>
int partition(vector<Comparable>& v, int left, int right) {
if (left >= right) return left;
int i = left, j = right;
Comparable pivot = v[left];
while (i < j) {
while (i < j && !(v[j] < pivot)) j--;
v[i] = v[j];
while (i < j && v[i] < pivot) i++;
v[j] = v[i];
}
v[i] = pivot;
return i;
}
template <typename Comparable>
void getTopK(vector<Comparable>& v, int k) {
int N = (int)v.size();
if (N <= k) {
return;
}
int left = 0;
int right = N - 1;
int mid = partition(v, left, right);
//不断调整分治的位置,直到position = k-1
//大了,往前调整
//小了,往后调整
while (mid != k - 1) {
if (mid > k - 1) {
right = mid - 1;
mid = partition(v, left, right);
} else {
left = mid + 1;
mid = partition(v, left, right);
}
}
v.resize(k);
}
标签:right,int,元素,mid,partition,获取,数组,pivot,left 来源: https://www.cnblogs.com/txtp/p/16291559.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。