关注
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;
}
查看原帖
点赞 评论
相关推荐
想减肥的考拉说又不是不能用:在pdd如果非科班同学进去真的没人教,上手项目慢的话,会不会被主动劝退
点赞 评论 收藏
分享
点赞 评论 收藏
分享
10-11 12:13
湖北工业大学 Java 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
435783次浏览 4427人参与
# 实习,投递多份简历没人回复怎么办 #
2451621次浏览 34828人参与
# 阿里云管培生offer #
118437次浏览 2130人参与
# 地方国企笔面经互助 #
7820次浏览 18人参与
# ai智能作图 #
40366次浏览 485人参与
# 虾皮求职进展汇总 #
106887次浏览 844人参与
# 北方华创开奖 #
106822次浏览 591人参与
# 春招别灰心,我们一人来一句鼓励 #
39882次浏览 506人参与
# 发工资后,你做的第一件事是什么 #
12070次浏览 59人参与
# 机械人春招想让哪家公司来捞你? #
157518次浏览 2267人参与
# 工作中,努力重要还是选择重要? #
35066次浏览 382人参与
# 你投递的公司有几家约面了? #
33100次浏览 188人参与
# 实习想申请秋招offer,能不能argue薪资 #
38998次浏览 314人参与
# 参加完秋招的机械人,还参加春招吗? #
19971次浏览 239人参与
# 非技术岗是怎么找实习的 #
155768次浏览 2120人参与
# 机械求职避坑tips #
24590次浏览 255人参与
# 双非本科求职如何逆袭 #
661029次浏览 7384人参与
# 工作两年想退休了 #
56765次浏览 730人参与
# 实习必须要去大厂吗? #
55316次浏览 957人参与
# 我的实习求职记录 #
6152112次浏览 84179人参与
# 华为工作体验 #
113521次浏览 877人参与
# 25届机械人为了秋招做了哪些准备? #
27121次浏览 368人参与