STL - 部分排序
-
partial_sort
其作用是对序列局部元素进行排序,默认排序是升序。它有两个重载函数。
⚠️ 要使用partial_sort别忘了要引用头文件“algorithm”哟 (^U^)ノ~
problem:排序区间[a_1, a_x],要求降序。
题目读入:
vector<int> a(N);
cin >> n >> x;
for (int i = 0; i < n; i++) cin >> a[i];//读入
“ 核心内容 ”:
partial_sort(a.begin(), a.begin() + x, a.end());//局部排序x ~ y区间
//迭代器
vector<int>::iterator it;
for (it = a.begin(); it < a.end(); it++) cout << *it << " ";
cout << '\n';
嘿嘿,细心的同学就会发现。。。
这是错的! WA
少了一个比较函数(题目要求降序)。彡(-_-;)彡
bool cmp(int a, int b)
{
return a > b;//自定义排序比较方法,降序
}
最后给出代码:
vector<int>::iterator vi;
cout << "局部排序前:" << endl;
for (vi = a.begin(); vi < a.end(); vi++) cout << *vi << " ";
cout << endl;
partial_sort(a.begin(), a.begin() + x, a.end(), cmp);// 局部排序,默认排序
cout << "局部排序,排序后:" << endl;
for (vi = a.begin(); vi < a.end(); vi++) cout << *vi << " "; // 输出
cout << endl;
本人系统上的输出结果:
局部排序前:
1 2 3 4 5 6 7 8
局部排序,排序后:
8 7 6 5 4 1 2 3
必须要注意的是!
- 上面展示的是在本人系统上这段代码执行后的结果。在你的系统上结果可能会不同。
- 不能保持未排序元素的原始顺序。未排序元素顺序是不确定的,这取决于我们的实现。
说了这么多,你学会了吗?
老规矩!
举手之劳,就点个赞再走呗 ε==(づ′▽`)づ
求支持,跪谢! (>^ω^<)喵~
注:如果有说错的地方,希望大佬们来指正
从大到小排序可以直接用_greater[HTML_REMOVED]()库函数,头文件[HTML_REMOVED]
洛谷已经502 Bad Gateway
嗯
洛谷卡了
洛谷卡了,进不去。