为啥选择排序的复杂度不是 n 阶乘?

Posted

技术标签:

【中文标题】为啥选择排序的复杂度不是 n 阶乘?【英文标题】:Why isn’t the complexity of selection sort n factorial?为什么选择排序的复杂度不是 n 阶乘? 【发布时间】:2022-01-06 14:11:11 【问题描述】:

如果选择排序在数组上迭代 n 次,其中 n 是数组的长度,每次迭代的比较次数比上一次少 1 次(第一次迭代有 n 次比较),那么选择排序的复杂度是 n ^2 而不是 n!(n 阶乘)?

【问题讨论】:

我们第一次遍历数组时,需要进行 n-1 次比较。第二次,n-2 次比较。第三次,n-3 次比较。等等。最后比较的总数是 n-1 + n-2 + n-3 + ... + 3 + 2 + 1 = n * (n - 1) / 2 【参考方案1】:

通常情况下,当您多次执行某个操作时,运行时间就会增加。因此,例如,如果我执行 10 次操作 5 次,那么我将执行总共 50 次操作。

另一方面,当你做一件事,然后做下一个,等等时,会增加运行时间。所以,例如,如果我做 10 个工作单元,然后是 5 个工作单元,我总共会做15 个工作单元。

您是正确的,选择排序首先查看 n 个项目,然后是 n-1 个项目,然后是 n-2 个项目,然后是 n-3 个项目,等等。问题是我们如何从那个到总运行时间。您建议将它们相乘:

n·(n-1)·(n-2)····2·1

但是,这意味着“我做 n 件事 n-1 次,然后做 n-2 次,然后再做 n-3 次,等等。”

这就是为什么我们将它们加在一起:

n + (n-1) + (n-2) + ... + 2 + 1 = n(n+1)/2 = Θ(n2)。

【讨论】:

以上是关于为啥选择排序的复杂度不是 n 阶乘?的主要内容,如果未能解决你的问题,请参考以下文章

为啥快速排序算法的时间复杂度是O(nlogn)而不是O(n²)?

十大排序算法之选择排序

排序算法的时间复杂度 (转载)

选择排序

为啥计数排序的时间和空间复杂度是 O(n + k) 而不是 O(max(n, k))?

各种排序算法的稳定性和时间复杂度小结