C++面试题:STL中的sort排序是稳定排序吗?

前言:
最近看到一个C++的面试题,问道STL中的sort排序是否是稳定排序?

回答:
sort()排序当然不是稳定排序,sort是主要用到了快速排序(平均时间复杂度为O(nlogn)),还结合了插入排序(时间复杂度为O(n2))和堆排序(时间复杂度为O(nlogn))。

C++面试题:STL中的sort排序是稳定排序吗?_第1张图片
注:关于sort的理解最好的方式就是看源码和看书

补充:

STL中的排序算法如下:
C++面试题:STL中的sort排序是稳定排序吗?_第2张图片
Effective STL对如何选择排序函数总结的很好:
1)若需对vector, string, deque, 或array容器进行全排序,你可选择sort或stable_sort;
2)若只需对vector, string, deque, 或array容器中取得top n的元素,部分排序partial_sort是首选.
3)若对于vector, string, deque, 或array容器,你需要找到第n个位置的元素或者你需要得到top n且不关系top n中的内部 顺序,nth_element是最 理想的;
4)若你需要从标准序列容器或者array中把满足某个条件 或者不满足某个条件的元素分开,你最好使用partition或stable_partition;
5)若使用的list容器,你可以直接使用partition和stable_partition算法,你可以使用list::sort代替sort和stable_sort排序。

你可能感兴趣的:(C++学习笔记)