繁体   English   中英

计算插入排序的时间复杂度

[英]calculating time complexity for insertion sort

我试图了解插入排序的时间复杂度。 我被困在while循环中。 我不知道while循环执行了多少次

InsertionSort(A)
    for j = 2 to A.length
        key = A[j]
        i = j - 1
        while i>0 and A[i]>key
            A[i+1] = A[i]
            i = i - 1
        A[i+1] = key

我知道for循环执行n + 1次,循环中的每个语句执行n次,而循环也执行n次。但是,我不明白的是“ while循环下的语句在最坏情况和最佳情况下都执行了多少次? ”

在最坏的情况下, A按降序排序,这意味着对于第j个条目,内部循环将运行j次(给出或取“ +1”或“ -1” ...)。 令人高兴的是,有一个公式可以得出结论:正如高斯自发地在胁迫下发现的那样 ,将1n所有数字相加得出n*(n+1)/2

因为我们只关心复杂度而不是实际值,所以可以不考虑常数和乘法因子,而得出O(n^2)

撇开舌头,在内部循环计数线性限制的情况下,一个循环中存在一个循环的事实强烈表明O(n^2)

最好的情况是, A已按升序排序,则根本不会输入内部循环,并且总体复杂度为O(n)

平均情况在很大程度上取决于您预期的“无序性”状态。 例如,如果您的列表基本上总是已经排序,并且只有很少,非常本地的切换,则排序将表现得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM