栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

STL的list :: sort()使用哪种排序算法?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STL的list :: sort()使用哪种排序算法?

该标准不需要特定的算法,只要求它必须稳定,并使用大约N lg
N个比较来完成排序。例如,这允许使用快速排序的合并排序或链接列表版本(与流行的看法相反,快速排序 不一定是 不稳定的,即使最常见的数组实现是)。

有了这个条件,简短的答案是,在大多数当前的标准库中,它

std::sort
是作为一个intro-
sort(自省排序)实现的,它基本上是一个Quicksort,可以跟踪其递归深度,并将切换到Heapsort(通常速度较慢,但​​是如果Quicksort使用的递归深度过深,则可以保证O(n
log n)的复杂性。Introsort是相对较新的发明(1990年代后期)。较旧的标准库通常使用Quicksort代替。

stable_sort
之所以存在这个问题是因为,对数组状容器进行排序时,大多数最快的排序算法都是不稳定的,因此该标准既包括
std::sort
(快速但不一定稳定)又包括
std::stable_sort
(稳定但通常较慢)。

但是,这两种方法通常都希望使用随机访问的迭代器,并且对于链表之类的东西工作不佳(如果有的话)。为了使链表具有良好的性能,该标准包括

list::sort
。但是,对于链表,实际上并没有任何权衡取舍-
实现既稳定 又与 其他任何东西一样快的合并排序很容易。这样,他们只需要一个
sort
稳定的成员函数即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号