【问题标题】:How To calculate time complexity of selection sort如何计算选择排序的时间复杂度
【发布时间】:2020-08-13 15:43:35
【问题描述】:

使用伪代码的选择排序(最坏情况)的时间复杂度:

'Selection-Sort(A)

1 For j = 1 to (A.length - 1)

2   i = j

3   small = i

4   While i < A.length

5     if A[i] < A[small]

6       small = i

7     i = i + 1

8   swap A[small], A[j]

第一步将发生 n-1 次(n 是数组的长度)。所以第二个和第三个。我坚持第四步是否会发生n!时间或其他东西。

【问题讨论】:

    标签: sorting selection


    【解决方案1】:

    该算法的基本操作是在第 5 行的内部循环中的比较。两个循环都执行了 ≈ n 次,即基本操作执行了 n*n 次 ≈ n^2。

    选择排序的时间复杂度为 O(n^2)。最坏的最好情况和平均情况是一样的。

    您应该查看下面的链接,它对选择排序提供了很好的概述。 https://www.khanacademy.org/computing/computer-science/algorithms/sorting-algorithms/a/analysis-of-selection-sort

    希望这会有所帮助。

    编辑:

    在分析非递归算法的时间复杂度时,

    • 确定指示输入大小的参数
    • 确定基本操作
    • 设置表示基本操作执行次数的总和
    • 建立成长顺序
    • 给出渐近估计

    在这种情况下,输入大小将是数组的大小,基本操作是比较,算术和是,

    Σ1≤ j ≤n-1 Σj≤ i ≤n 或 Σ0≤ j ≤n-2 Σj+1≤ i ≤n-1

    这将计算为 (n-1)(n/2),它是渐近 O(n^2)。

    要了解更多信息,我会推荐这两本书,

    1. 算法设计与分析简介 - Anany Livitin

    2. 算法简介 - Coreman

    【讨论】:

    • 在您附加的链接中,案例被添加而不是相乘(while 循环 (n+1)(n/2))。你能解释一下为什么吗?
    猜你喜欢
    • 2019-10-19
    • 2015-06-15
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2015-01-05
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多