【发布时间】:2018-05-14 19:11:51
【问题描述】:
快速排序算法可以分为以下几个步骤
1) 识别支点。
2) 基于pivot对链表进行分区。
3) 将链表递归地分成两部分。
现在,如果我总是选择最后一个元素作为枢轴,那么识别枢轴元素(第一步)需要 O(n) 时间。
识别出枢轴元素后,我们可以存储它的数据并将其与所有其他元素进行比较以识别正确的分区点(第二步)。每次比较都需要 O(1) 时间,因为我们存储了数据透视数据,每次交换需要 O(1) 时间。因此,n 个元素总共需要 O(n) 时间。
所以递归关系是
T(n) = 2T(n/2) + n 即 O(nlogn),与链表的归并排序相同。
那么为什么对于链表来说,合并排序优于快速排序呢?
【问题讨论】:
-
链表首选合并排序 - 需要引用。
-
我投票决定将此问题作为题外话结束,因为这个问题最好发给Computer Science 网站。
-
@tadman 我不能在这里问算法和时间复杂度问题吗?这个网站上有很多这样的问题。
-
由于没有提供引用,我自己查了一下,very first result 声明 链表的缓慢随机访问性能使得其他一些算法(如快速排序)表现不佳,而其他(如堆排序)完全不可能.
-
我以前做过,效果很好。我想说的主要障碍是应用更高级/棘手的枢轴选择算法的实际效率低下。如果没有随机访问,即使是简单的三中位数也需要完整通过列表。然而,像 stackoverflow.com/questions/40622430/… 这样的最近趋势可能会使这一点过时。
标签: algorithm sorting time-complexity