关注
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;
}
查看原帖
点赞 评论
相关推荐
03-05 13:31
郑州轻工业大学 Java
书海为家:实习是成为大厂正式员工很好的敲门砖,看您的简历中有一段实习经历,挺好的。我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己实习时做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
8568次浏览 85人参与
# 面试被问第一学历差时该怎么回答 #
273980次浏览 2223人参与
# MiniMax求职进展汇总 #
26727次浏览 327人参与
# 沪漂/北漂你觉得哪个更苦? #
3172次浏览 65人参与
# 百度工作体验 #
316721次浏览 2233人参与
# 你的实习产出是真实的还是包装的? #
5549次浏览 94人参与
# 米连集团26产品管培生项目 #
8777次浏览 246人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
17125次浏览 138人参与
# 学历or实习经历,哪个更重要 #
242906次浏览 1259人参与
# AI面会问哪些问题? #
1972次浏览 55人参与
# 从事AI岗需要掌握哪些技术栈? #
1250次浏览 40人参与
# 你做过最难的笔试是哪家公司 #
2604次浏览 33人参与
# HR最不可信的一句话是__ #
1584次浏览 42人参与
# 春招至今,你的战绩如何? #
20860次浏览 198人参与
# 找AI工作可以去哪些公司? #
1195次浏览 21人参与
# 校招生月薪1W算什么水平 #
134663次浏览 456人参与
# AI时代,哪个岗位还有“活路” #
4143次浏览 95人参与
# XX请雇我工作 #
51235次浏览 172人参与
# 简历第一个项目做什么 #
33043次浏览 425人参与
# 你最满意的offer薪资是哪家公司? #
77229次浏览 378人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
153306次浏览 894人参与
# 秋招白月光 #
734381次浏览 5454人参与
查看11道真题和解析