C++ STL排序函数
排序函数 | 功能 |
---|---|
sort() | 对指定范围内所有的数据进行排序,排序后各个元素的相对位置很可能发生改变。 |
stable_sort() | 对指定范围内所有的数据进行排序,并确保排序后各个元素的相对位置不发生改变。 |
partial_sort() | 对指定范围内最大或最小的 n 个元素进行排序。 |
nth_element() | 调整指定范围内元素的存储位置,实现位于位置 n 的元素正好是全排序情况下的第 n 个元素,并且按照 全排序规则排在位置 n 之前的元素都在该位置之前,按照全排序规则排在位置 n 之后的元素都在该位置之后 |
对于以上 4 种排序函数,在使用时,都要求传入随机访问迭代器,因此这些函数都只适用于 array、vector、deque 以及普通数组。综合考虑它们的时间和空间效率,其性能之间的比较如下所示:
nth_element() > partial_sort() > sort() > stable_sort() <–从左到右,性能由高到低
当需要对普通数组或者 array、vector 或者 deque 容器中的元素进行排序时,怎样选择最合适(效率最高)的排序函数呢?总结了以下几点:
- 如果需要对所有元素进行排序,则选择 sort() 或者 stable_sort() 函数;
- 如果需要保持排序后各元素的相对位置不发生改变,就只能选择 stable_sort() 函数,而另外 3 个排序 函数都无法保证这一点;
- 如果需要对最大(或最小)的 n 个元素进行排序,则优先选择 partial_sort() 函数;
- 如果只需要找到最大或最小的 n 个元素,但不要求对这 n 个元素进行排序,则优先选择 nth_element() 函数。