博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL 源代码剖析 算法 stl_algo.h -- partial_sort / partial_sort_copy
阅读量:6615 次
发布时间:2019-06-24

本文共 1473 字,大约阅读时间需要 4 分钟。

本文为senlie原创,转载请保留此地址:

partial_sort / partial_sort_copy

-----------------------------------------------------------------------------------------------------------------------------------------

描写叙述:本算法接受一个 middle 迭代器(位于序列[first, last) 之列)。然后又一次安排[first, last),
使序列中的 middle - first 个最小元素以递增顺序排序。置于[first, last)内。
其余 last - middle 个元素安置于[middle, last)中,不保证有不论什么特定顺序。
思路:
算法内部採用 heap sort
1.用 make_heap() 将 [first, middle) 组织成一个 max-heap
2.将[middle,last) 中的每个元素与 max-heap 的堆顶元素比較,假设小于该值,就互换位置并又一次保持 max-heap 状态。
3.如今[first, middle)里保存的是较小的 middle - first 个元素,再使用 sort_heap() 对[first, middle] 排序就能够了
复杂度:(last - first) * log(middle - first) 次比較 
源代码:
template 
inline void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last) { __partial_sort(first, middle, last, value_type(first));}template
void __partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, T*) { make_heap(first, middle); for (RandomAccessIterator i = middle; i < last; ++i) if (*i < *first) __pop_heap(first, middle, i, T(*i), distance_type(first)); sort_heap(first, middle);}
演示样例:
int A[] = {7, 2, 6, 11, 9, 3, 12, 10, 8, 4, 1, 5};const int N = sizeof(A) / sizeof(int);partial_sort(A, A + 5, A + N);copy(A, A + N, ostream_iterator
(cout, " "));// The printed result is "1 2 3 4 5 11 12 10 9 8 7 6".
你可能感兴趣的文章
apiCloud手动检测更新
查看>>
动态生成WizardPage
查看>>
iOS - OC NSData 数据
查看>>
Java web 开发填坑记 1 -如何正确的下载 eclipse
查看>>
每日学习与工作计划移至日事清APP
查看>>
iOS - Quartz 2D 第三方框架 Charts 绘制图表
查看>>
MM顾问的常见面试问题(ZZ)
查看>>
转:Windows 8上强制Visual Studio以管理员身份运行
查看>>
迟来的加勒比海盗3 观后
查看>>
类与对象 - PHP手册笔记
查看>>
谈一谈互联网创业补贴变味后的现象
查看>>
MapGIS转Shp文件的单位问题
查看>>
使用Karate轻松实现自动API测试
查看>>
React
查看>>
CentOS -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8)
查看>>
编写一个基本的Android应用程序
查看>>
我的友情链接
查看>>
查看Linux操作系统安装的位数(getconf 命令应用)
查看>>
前后端中转服务remoteService的设计与实现
查看>>
ifstream读取文件失败和乱码问题
查看>>