Algorithm 在子列表中始终选择第二小元素作为轴心时,快速排序时间复杂度

Algorithm 在子列表中始终选择第二小元素作为轴心时,快速排序时间复杂度,algorithm,sorting,Algorithm,Sorting,当pivot始终是子列表中第二小的元素时,快速排序的时间复杂性 还是O(NlogN)吗 如果我解递推方程 F(N) = F(N-2) + N = F(N-2(2)) + 2N -2 = F(N-3(2)) + 3N - (2+1)(2) = F(N-4(2)) + 4N - (3+2+1)(2) 这是O(N^2),但不知怎么的,我怀疑我的答案,请有人帮我澄清一下?首先,快速排序算法的平均时间复杂度为O(NlogN),但它最糟糕的时间复杂度实际上是O(N^2) 快速排序的一般复杂性分析不仅取决

当pivot始终是子列表中第二小的元素时,快速排序的时间复杂性

还是O(NlogN)吗

如果我解递推方程

F(N) = F(N-2) + N 
= F(N-2(2)) + 2N -2
= F(N-3(2)) + 3N - (2+1)(2)
= F(N-4(2)) + 4N - (3+2+1)(2)

这是O(N^2),但不知怎么的,我怀疑我的答案,请有人帮我澄清一下?

首先,快速排序算法的平均时间复杂度为
O(NlogN)
,但它最糟糕的时间复杂度实际上是
O(N^2)

快速排序的一般复杂性分析不仅取决于递归关系的设计,还取决于递归关系的
F(N-K)
项中变量
K
的值。根据您是否在计算最佳、平均和最坏情况的复杂度,该值通常分别由以最佳、平均或最坏元素为轴心的概率分布来估计

例如,如果您想要计算最佳情况,那么您可能认为您的pivot总是将数组分成两部分。(即
K=N/2
)如果计算最坏情况,您可能会认为您的轴心是最大或最小的元素。(即,
K=1
)对于平均情况,基于元素指数的概率分布,使用
K=N/4
。(您可能需要更多信息)基本上,对于一般情况,您的递归关系变成
F(N)=F(N/4)+F(3*N/4)+N
,这将产生
O(NlogN)


现在,您为
K
假设的值,即
2
,只比最坏情况差一步。这就是为什么您不能在此处观察
O(NlogN)
的平均情况性能,并获得
O(N^2)
首先,快速排序算法的平均时间复杂度为
O(NlogN)
,但其最差的时间复杂度实际上是
O(N^2)

快速排序的一般复杂性分析不仅取决于递归关系的设计,还取决于递归关系的
F(N-K)
项中变量
K
的值。根据您是否在计算最佳、平均和最坏情况的复杂度,该值通常分别由以最佳、平均或最坏元素为轴心的概率分布来估计

例如,如果您想要计算最佳情况,那么您可能认为您的pivot总是将数组分成两部分。(即
K=N/2
)如果计算最坏情况,您可能会认为您的轴心是最大或最小的元素。(即,
K=1
)对于平均情况,基于元素指数的概率分布,使用
K=N/4
。(您可能需要更多信息)基本上,对于一般情况,您的递归关系变成
F(N)=F(N/4)+F(3*N/4)+N
,这将产生
O(NlogN)


现在,您为
K
假设的值,即
2
,只比最坏情况差一步。这就是为什么您不能在这里观察
O(NlogN)
的平均案例性能,并得到
O(N^2)

它看起来是正确的;然而,它将有助于更加严格,例如,使用归纳法证明它在一般情况下确实是O(N^2)。快速排序不是“O(N Log N)”。@YvesDaoust为什么快速排序不是O(NLogN)?@kuze-Its
O(NLogN)
对于一般情况,但其最坏的性能是
O(N^2)
。您的快速排序分析版本并不构成一般情况。@我知道这不是一般情况,我只是很好奇快速排序什么时候仍然保持O(NlogN)它看起来是正确的;然而,它将有助于更加严格,例如,使用归纳法证明它在一般情况下确实是O(N^2)。快速排序不是“O(N Log N)”。@YvesDaoust为什么快速排序不是O(NLogN)?@kuze-Its
O(NLogN)
对于一般情况,但其最坏的性能是
O(N^2)
。您的快速排序分析版本并不构成一般情况。@我知道这不是一般情况,我只是很好奇快速排序何时仍然保持O(NlogN)