C++ 标准库排序函数总结

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() 函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值