gpt4 book ai didi

c++ - 何时使用归并排序,何时使用快速排序?

转载 作者:IT老高 更新时间:2023-10-28 22:23:42 24 4
gpt4 key购买 nike

wikipedia article for merge sort .

wikipedia article for quick sort .

两篇文章都具有出色的可视化效果。

两者都有 n*log(n) 复杂度。

很明显,数据的分布会影响排序的速度。我的猜测是,由于比较可以快速比较任意两个值,因此无论它们的分布如何,数据值的范围都无关紧要。

更重要的是,应该考虑横向分布(x 方向)相对于排序(去除大小)。

如果测试数据有某种程度的排序......

最佳答案

它通常取决于所涉及的数据结构。快速排序是通常是最快的,但不能保证 O(n*log(n));有退化的情况,它变成 O(n^2)。堆排序是常见的选择;它保证 O(n*log(n)),无论初始顺序如何,但它的常数因子要高得多。它通常在你使用需要一个硬性的时间上限。一些更新的算法使用快速排序,但尝试识别它何时开始退化,然后切换到堆排序。合并排序用于数据结构不支持随机访问,因为它适用于纯顺序访问(前向迭代器,而不是随机访问迭代器)。用于std::list<>::sort , 例如。这也是广泛用于外部排序,其中随机访问可以非常非常与顺序访问相比,成本更高。 (当对一个文件进行排序时不适合内存,你可以把它分成适合的 block 内存,使用快速排序对这些进行排序,将每个写入文件,然后对生成的文件进行合并排序。)

关于c++ - 何时使用归并排序,何时使用快速排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7878768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com