一. 概述
| 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)
//排序,默认是从小到大顺序
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)
//以 < 对区间[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)
//对区间[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)
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)
//将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)
//将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)
本文深入探讨了C++中用于排序和堆操作的关键算法,包括sort(), stable_sort(), partial_sort()等,以及如何实现局部排序、根据第n个元素排序、Heap算法等。详细解释了每种算法的特点和用法。
429

被折叠的 条评论
为什么被折叠?



