【发布时间】:2011-12-14 07:02:05
【问题描述】:
wikipedia article for merge sort。
wikipedia article for quick sort。
两篇文章都具有出色的可视化效果。
两者都有 n*log(n) 复杂度。
很明显,数据的分布会影响排序的速度。我的猜测是,由于比较可以快速比较任意两个值,因此无论它们的分布如何,数据值的范围都无关紧要。
更重要的是,应该考虑横向分布(x 方向)相对于排序(去除大小)。
如果测试数据有某种程度的排序......
【问题讨论】:
-
我可以告诉你什么时候使用
std::sort...总是:) -
std:sort 实现了什么......哪个算法?
-
克里斯,标准没有规定实现。但是,您的标准库可能会根据序列中元素的类型和数量使用这两种算法的组合。
-
@ChrisAaker:标准库的 GCC 实现使用 introsort,它是快速排序的一种变体,如果它感觉会回退到合并排序达到最坏情况的复杂性(
O(N^2)用于快速排序) -
用户一直在谈论快速排序失败或遇到最坏的情况..但是这是怎么发生的呢?一个简单的例子或测试用例?