[英]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” ...)。 令人高興的是,有一個公式可以得出結論:正如高斯自發地在脅迫下發現的那樣 ,將1
到n
所有數字相加得出n*(n+1)/2
。
因為我們只關心復雜度而不是實際值,所以可以不考慮常數和乘法因子,而得出O(n^2)
。
撇開舌頭,在內部循環計數線性限制的情況下,一個循環中存在一個循環的事實強烈表明O(n^2)
。
最好的情況是, A
已按升序排序,則根本不會輸入內部循環,並且總體復雜度為O(n)
。
平均情況在很大程度上取決於您預期的“無序性”狀態。 例如,如果您的列表基本上總是已經排序,並且只有很少,非常本地的切換,則排序將表現得很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.