关注
STL里面的nth_element和partial_sort均可以高效解决此问题,最高效的是nth_element,基本思想是快速排序。具体可以参考本人博客:http://blog.csdn.net/bxw1992/article/details/76695461 void nth_element(vector<int> &vec, int num) 将最小(或最大)的num个数放在数组的开始处。注意num个数是无序的。
主要是利用快速排序的切分操作,源码针对枢轴的选取了优化措施(取待处理区间首、中间、尾3个值中的中间值作为枢轴,防止切分操作退化),这里为了简化,没有对枢轴的选取进行优化。
根据切分函数的返回值,判断是否达到了找出了num个满足要求的数,如果不满足,判断下一处理区间。
#include<iostream>
#include<vector>
using namespace std;
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
int partition(vector<int> &vec,int low,int hi)
{
int mid = (hi - low) / 2 + low;
int pivot = vec[low];
int i = low + 1;
int j = hi;
while (true)
{
while (i < hi && vec[i] < pivot) i++;
while (j>low && vec[j]>pivot) j--;
if (i >= j) break;
swap(vec[i], vec[j]);
i++;
j--;
}
swap(vec[low],vec[j]);
return j;
}
void nth_element(vector<int> &vec, int num)
{
int len = vec.size();
int low = 0;
int hi = len - 1;
while (low<hi)
{
int j = partition(vec,low,hi);
if (j == num - 1) return;
else if (j < num - 1) low = j+1;
else hi = j - 1;
}
}
void myprint(const vector<int> a)
{
for (int i = 0; i < a.size(); i++)
{
cout << a[i] << " ";
}
cout << endl;
}
int main()
{
vector<int> data = { 11,5, 4, 7, 6, 8, 1,10 };
myprint(data);
nth_element(data,2);
myprint(data);
system("pause");
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
10-16 15:02
重庆大学 C++ 点赞 评论 收藏
分享
先锋战士:说得很真诚。鄙视链自古有之,学历,家庭背景,财富,权利。从小有之,小学羡慕那些当班委的,中学羡慕那些学生会的,高中羡慕尖子班拿教学金的,大学羡慕高绩点,毕业了羡慕进大厂的。工作了,又羡慕高职级的,再后来又羡慕别人早早结婚的。我想表达的观点很简单,无论是华为od还是百度,都是经历,没有孰高孰低,为了抵达下一个风景,总会付出更多东西,但不就是人生吗?正如登山,每个阶段的山,都要想办法攀登,在博主的文字中,见到了坚持和积极寻找问题解决办法的心态 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 同bg的你秋招战况如何? #
171986次浏览 1001人参与
# 扒一扒那些奇葩实习经历 #
125586次浏览 1096人参与
# 360集团校招 #
19120次浏览 146人参与
# 你实习是赚钱了还是亏钱了? #
27150次浏览 225人参与
# 去哪儿求职进展汇总 #
145657次浏览 994人参与
# 用一句话形容你的团队氛围 #
16922次浏览 173人参与
# 京东开奖 #
459444次浏览 2546人参与
# 毕业论文进行时 #
5361次浏览 75人参与
# 面对逼签的应对技巧 #
5623次浏览 30人参与
# 我来点评面试官 #
14562次浏览 104人参与
# 牛友的国庆旅行碎片 #
20969次浏览 125人参与
# 今年秋招是回暖还是遇冷 #
28216次浏览 174人参与
# 秋招开始捡漏了吗 #
73362次浏览 514人参与
# 找工作八股要背到什么程度? #
16135次浏览 232人参与
# 三一集团提前批进度交流 #
41479次浏览 229人参与
# 社会教会你的第一课 #
110173次浏览 859人参与
# 工作后,谈恋爱还和学生时代一样吗? #
41116次浏览 377人参与
# 上班后,才发现大学__白学了 #
14356次浏览 100人参与
# 你找工作是从容有余 or 匆忙滚爬? #
10326次浏览 85人参与
# 阿里云工作体验 #
33431次浏览 108人参与
# 你的领导最像哪种动物,为什么? #
25806次浏览 136人参与
# 职场破冰,你们都聊什么? #
30970次浏览 154人参与
