cb50a_c++_STL_算法_局部排序partial_sort
cb50a_c++_STL_算法_局部排序partial_sort
partial_sort(b,se,e)排序一部分,begin,source end,end
cout << "部分排序,开头的5个数排序" << endl;
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end());
需要注意的是,不能保持未排序元素的原始顺序。在执行 partial_sort() 后后面元素的顺序是不确定的,这取决于具体的实现。
partial_sort(b,se,e,p), begin,source end,end,paramete
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end(),greater<int>());//从大到小
partial_sort_copy(sb,se,db,de) 边排序边copy,sb(source begin),se(source end),db(destination begin)
partial_sort_copy(sb,se,db,de,p)
排序算法:
sort() 排序
stable_sort()稳定排序
https://www.cnblogs.com/txwtech/p/12366186.html
partial_sort()
partial_sort_copy(sb,se,db,de),
nth_element()
partition()分区
stable_partition()稳定分区
https://www.cnblogs.com/txwtech/p/12365880.html
make_heap() 构造一个大顶堆
push_heap()
pop_heap()
sort_heap()堆排序
greater<int>()是一个泛型
3,4,5,6,7,2,3,4,5,6,1,2,3,4,5
//
原理参考:
partial_sort 原理概述
那么 partial_sort 的原理是什么呢?是堆排序!
partial_sort的原理:
对原始容器内区间为[first, middle)的元素执行 make_heap() 操作构造一个大顶堆,
然后遍历剩余区间[middle, last)中的元素,剩余区间的每个元素均与大顶堆的堆顶元素进行比较(大顶堆的堆顶元素为最大元素,该元素为第一个元素,很容易获得),若堆顶元素较小,则交换堆顶元素和遍历得到的元素值(pop_heap ),并重新调整该大顶堆以维持该堆为大顶堆(adjust_heap)。
遍历结束后,[first, middle)区间内的元素便是排名在前的m个元素,再对该堆做一次堆排序 sort_heap() 便可得到最后的结果。
STL之partial_sort算法源码讲解
https://blog.csdn.net/ggq89/article/details/88817085
/*cb50a_c++_STL_算法_局部排序partial_sort partial_sort(b,se,e)排序一部分,begin,source end,end
cout << "部分排序,开头的5个数排序" << endl;
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end()); 需要注意的是,不能保持未排序元素的原始顺序。在执行 partial_sort() 后后面元素的顺序是不确定的,这取决于具体的实现。 partial_sort(b,se,e,p), begin,source end,end,paramete
partial_sort(ideq.begin(), ideq.begin() + 5, ideq.end(),greater<int>());//从大到小 partial_sort_copy(sb,se,db,de) 边排序边copy,sb(source begin),se(source end),db(destination begin)
partial_sort_copy(sb,se,db,de,p) 排序算法:
sort() 排序
stable_sort()稳定排序
https://www.cnblogs.com/txwtech/p/12366186.html partial_sort()
partial_sort_copy(sb,se,db,de),
nth_element() partition()分区
stable_partition()稳定分区
https://www.cnblogs.com/txwtech/p/12365880.html make_heap()
push_heap()
pop_heap()
sort_heap() greater<int>()是一个泛型 3,4,5,6,7,2,3,4,5,6,1,2,3,4,5 // 原理参考:
partial_sort 原理概述
那么 partial_sort 的原理是什么呢?是堆排序! partial_sort的原理: 对原始容器内区间为[first, middle)的元素执行 make_heap() 操作构造一个大顶堆,
然后遍历剩余区间[middle, last)中的元素,剩余区间的每个元素均与大顶堆的堆顶元素进行比较(大顶堆的堆顶元素为最大元素,该元素为第一个元素,很容易获得),若堆顶元素较小,则交换堆顶元素和遍历得到的元素值(pop_heap ),并重新调整该大顶堆以维持该堆为大顶堆(adjust_heap)。
遍历结束后,[first, middle)区间内的元素便是排名在前的m个元素,再对该堆做一次堆排序 sort_heap() 便可得到最后的结果。 STL之partial_sort算法源码讲解
https://blog.csdn.net/ggq89/article/details/88817085
*/
#include <iostream>
#include <algorithm>
#include <deque>
#include <functional> using namespace std; template <typename TT9>
void print9(TT9 &ideq)
{
for (TT9::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl; } int main()
{
deque<int> ideq;
for (int i = ; i <= ; ++i)
ideq.push_back(i);
for (int i = ; i <= ; ++i)
ideq.push_back(i);
for (int i = ; i <= ; ++i)
ideq.push_back(i);
print9(ideq); cout << "部分排序,开头的5个数排序" << endl;
partial_sort(ideq.begin(), ideq.begin() + , ideq.end());//默认从小到大,less<int>()
print9(ideq); partial_sort(ideq.begin(), ideq.begin() + , ideq.end(),greater<int>());//从大到小 print9(ideq); return ;
}
/* */ #include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <functional>
#include <iterator> using namespace std; template <class TT99>
void print99(TT99 ideq)
{
for (TT99::iterator iter = ideq.begin(); iter != ideq.end(); ++iter)
cout << *iter << ' ';
cout << endl;
} int main()
{
deque<int> ideq;
vector<int> ivec6();
vector<int> ivec30(); for (int i = ; i <= ; ++i)
ideq.push_back(i);
for (int i = ; i <= ; ++i)
ideq.push_back(i);
for (int i = ; i <= ; ++i)
ideq.push_back(i);
print99(ideq); partial_sort_copy(ideq.begin(), ideq.end(), ivec6.begin(), ivec6.end()); //print99(ivec6);
cout << "copy到cout里面" << endl;
copy(ivec6.begin(), ivec6.end(), ostream_iterator<int>(cout, " "));
cout << endl; //用一个迭代器接受partial_sort_copy返回的结果,迭代器的位置
vector<int>::iterator pos;
pos=partial_sort_copy(ideq.begin(), ideq.end(), ivec30.begin(), ivec30.end());
cout << "直接调用自定义的函数,显示全部" << endl;
print99(ivec30);
cout << "只显示copy的部分," << endl; for (vector<int>::iterator iter = ivec30.begin(); iter != pos; ++iter)
cout << *iter << ' ';
cout << endl; return ;
}
cb50a_c++_STL_算法_局部排序partial_sort的更多相关文章
- STL_算法_局部排序(partial_sort、partial_sort_copy)
C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) /***************************************** // partial_sort(b, ...
- cb51a_c++_STL_算法_根据第n个元素排序nth_element
cb51a_c++_STL_算法_根据第n个元素排序nth_elementnth_element(b,n,e),比如最大的5个数排序,或者最小的几个数nth_element(b,n,e,p)对比:pa ...
- cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort
cb49a_c++_STL_算法_对所有元素排序_sort_stable_sort sort(b,e) sort(b,e,p) stable_sort(b,e) stable_sort(b,e,p) ...
- cb47a_c++_STL_算法_排列组合next_prev_permutation
cb47a_c++_STL_算法_排列组合next_prev_permutation 使用前必须先排序.必须是 1,2,3或者3,2,1.否者结果不准确.如果, 1,2,4,6.这样数据不会准确nex ...
- cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare
*cb36a_c++_STL_算法_区间的比较equal_mismatch_lexicographical_compare 区间:容器中的全部数据或者部分数据,都叫做区间 equal(b,e,b2), ...
- cb34a_c++_STL_算法_查找算法_(7)_lower_bound
cb34a_c++_STL_算法_查找算法_(7)_lower_bound//针对已序区间的查找算法,如set,multiset关联容器-自动排序lower_bound()--第一个可能的位置uppe ...
- cb33a_c++_STL_算法_查找算法_(6)binary_search_includes
cb33a_c++_STL_算法_查找算法_(6)binary_search_includes//针对已序区间的查找算法,如set,multiset关联容器-自动排序binary_search(b,e ...
- cb32a_c++_STL_算法_查找算法_(5)adjacent_find
cb32a_c++_STL_算法_查找算法_(5)adjacent_findadjacent_find(b,e),b,begin(),e,end()adjacent_find(b,e,p),p-par ...
- cb28a_c++_STL_算法_查找算法_(1)find_find_if
cb28a_c++_STL_算法_查找算法_(1)find_find_iffind() //线性查找,比较慢.pos1 = find(ilist.begin(), ilist.end(), 5);fi ...
随机推荐
- 没找到工作的Java软件工程师是屌丝中的屌丝啊
Java软件开发的工作咋就那么难找呢?
- dsPIC33EP单片机的PPS(外设引脚选择)
利用dsPIC33EP单片机进行can通信的时候用到引脚复用 引脚复用通过查询数据手册: C1RX的寄存器为RPINR26.C1RXR=(设置为需要用到的引脚) 引脚设置为输入(C1RX),TRIS= ...
- [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式
引言:此文翻译自CodeProject上的同名文章<C# Delegates,Anonymous Methods, and Lambda Expressions>,在此一起Mark一下,此 ...
- [Objective-C] 006_Protocol(协议)
学过java的同学都知道Interface(接口),那么在Objective-C中有没有接口呢?其实 Objective-C中用Protocol(协议)来实现的,在Objective-C具体怎么用,我 ...
- toString()方法的使用
toString()方法: java.lang.Object类的toString()方法的定义如下: public String toString(){ return getClass().getNa ...
- Unity 游戏框架搭建 2019 (五十二~五十四) 什么是库?&第四章总结&第五章简介
在上一篇,我们对框架和架构进行了一点探讨.我们在这一篇再接着探讨. 什么是库呢? 来自同一位大神的解释: 库, 插到 既有 架构 中, 补充 特定 功能. 很形象,库就是搞这个的.我们的库最初存在的目 ...
- 又发现一款纯js开源电子表格Luckysheet
据官网介绍这个电子表格插件,是一款纯前端类似excel的在线表格,功能强大.配置简单.完全开源. 官网链接: Luckysheet官网 在线DEMO 特性包含: 表格设置,包括冻结行列.合并单元格.筛 ...
- Java实现 LeetCode 376 摆动序列
376. 摆动序列 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5 ...
- Java实现UVA10131越大越聪明(蓝桥杯每周一题)
10131越大越聪明(蓝桥杯每周一题) [问题描述] 一些人认为,大象的体型越大,脑子越聪明.为了反驳这一错误观点,你想要分析一组大象的数据,找出尽量 多的大象组成一个体重严格递增但 IQ 严格递减的 ...
- 第四届蓝桥杯JavaC组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一 ...