簡體   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