STL学习笔记----14.STL算法之 (排序算法)
2012-03-08 10:50
459 查看
一. 概述
二. 对所有元素排序
heap可以看成一个二叉树,具有两大性质:
1. 第一个元素总是最大。
2. 总是能够在对数时间内增加或删除一个元素。
1. 将某区间的元素转化成heap
sort() | 对所有元素排序 |
stable_sort() | 对所有元素排序,并保持相等元素间的相对次序 |
partial_sort() | 排序,直到前n个元素就位 |
partial_sort_copy() | 排序,直到前n个元素就位,结果复制于它处 |
nth_element() | 根据第n个位置进行排序 |
partition() | 改变元素次序,使符合某准则的元素在前面 |
stable_partition() | 与partition()相同,但保持相对位置 |
make_heap() | 将一个区间转换成一个heap |
push_heap() | 将元素加入一个heap |
pop_heap() | 从heap移除一个元素 |
sort_heap() | 对heap进行排序,排序后不再是heap了 |
//排序,默认是从小到大顺序 void sort (RandomAccessIterator beg, RandomAccessIterator end) //排序,使用op(elem1, elem2)准则 void sort (RandomAccessIterator beg, RandomAccessIterator end, BinaryPredicate op) //保证相等元素的原本相对次序在排序后保持不变 //换句话出,相等的元素它会按照固有的顺序,比如字典顺序排序 void stable_sort (RandomAccessIterator beg, RandomAccessIterator end) void stable_sort (RandomAccessIterator beg, RandomAccessIterator end, BinaryPredicate op)三. 局部排序
//以 < 对区间[beg, end)内的元素进行排序,使区间[beg, sortEnd)内的元素有序 void partial_sort (RandomAccessIterator beg, RandomAccessIterator sortEnd, RandomAccessIterator end) //以op(elem1, elem2)对区间内元素进行排序 void partial_sort (RandomAccessIterator beg, RandomAccessIterator sortEnd, RandomAccessIterator end, BinaryPredicate op)四. 根据第n个元素排序
//对区间[beg, end)内的元素进行排序,使第n个位置上的元素就位 //也就是n之前的元素都小于等于它,n之后的元素都大于等于它 //但是n前后的元素不要求有序 void nth_element (RandomAccessIterator beg, RandomAccessIterator nth, RandomAccessIterator end) void nth_element (RandomAccessIterator beg, RandomAccessIterator nth, RandomAccessIterator end, BinaryPredicate op)五. Heap算法
heap可以看成一个二叉树,具有两大性质:
1. 第一个元素总是最大。
2. 总是能够在对数时间内增加或删除一个元素。
1. 将某区间的元素转化成heap
void make_heap (RandomAccesIterator beg, RandomAccesIterator end) void make_heap (RandomAccesIterator beg, RandomAccesIterator end, BinaryPredicate op)2. 对heap增加一个元素
//将end之前最后一个元素加入原本就是个heap的[beg, end-1)区间内 //使整个区间[beg, end)成为一个heap void push_heap (RandomAccesIterator beg, RandomAccesIterator end) void push_heap (RandomAccesIterator beg, RandomAccesIterator end, BinaryPredicate op)3. 对heap取出下一个元素
//将heap[beg, end)内最高元素,也就是第一个元素,移到最后位置 //并将剩余区间[beg, end-1)组成一个新的heap void pop_heap (RandomAccesIterator beg, RandomAccesIterator end) void pop_heap (RandomAccesIterator beg, RandomAccesIterator end, BinaryPredicate op)4. 将heap转换成一个已序序列
//进入函数前[beg, end)必须是一个heap, 排序后不是一个heap了 void sort_heap (RandomAccesIterator beg, RandomAccesIterator end) void sort_heap (RandomAccesIterator beg, RandomAccesIterator end, BinaryPredicate op)
相关文章推荐
- STL学习笔记----14.STL算法之 (排序算法)
- STL学习笔记----16.STL算法之 (数值算法)
- STL学习笔记----11.STL算法之 (变动性算法)
- C++ Primer 学习笔记_46_STL实践与分析(20)--容器特有的算法
- STL学习笔记之 算法(构造堆等)
- STL的内观排序(introsort)算法学习笔记
- 泛型编程与STL学习笔记之算法
- STL学习笔记--排序算法
- C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
- STL学习笔记--排序算法
- STL学习笔记--排序算法
- 算法导论学习笔记-1-基础排序算法
- C++ Primer 学习笔记_46_STL实践与分析(20)--容器特有的算法
- C++ Primer Plus学习笔记之STL算法
- STL学习笔记----13.STL算法之 (变序性算法)
- STL学习笔记----10.STL算法之 (非变动性算法)
- STL学习笔记--排序算法
- STL学习笔记----9.STL算法之 for_each()
- STL学习笔记之sort算法