簡體   English   中英

插入排序的運行時間

[英]The running time of Insertion-Sort

在我的書中,他們根據輸入n計算插入排序的運行時間。 該算法是:

Insertion-Sort(A)                        cost   times
1. for j <- 2 to length[A]                c1    n
2.     do key <- A[j]                     c2    n-1
3.         Insert A[j] into the           0     n-1
            sorted sequence A[1..j-1]
4.     i <- j - 1                         c4    n-1
5.     while i > 0 and A[i] > key         c5    sum_{j=2}^n t_j
6.         do A[i+1] <- A[i]              c6    sum_{j=2}^n (t_j-1)
7.         i <- i - 1                     c7    sum_{j=2}^n (t_j-1)
8.     A[i+1] <- key                      c8    n-1

我的問題是,為什么times = n在第1行? 為什么不是n-1次?

在我看來,實際上不是在初始化中就多了1倍的時間成本,這是因為在成功執行n-1次迭代控制后,它將回到i <=(length(A))條件,並將i與A的長度進行比較。這1個額外的時間比較成本添加到循環中。

這件事在頁碼上有解釋。 Cormen的算法介紹中的25。

在CLRS的第25頁上,“當for或while循環以常規方式退出時(即,由於循環頭中的測試),該測試執行的次數比循環主體多一倍。” 這意味着退出條件將在退出for或while循環之前再執行一次。

考慮一下C中的for循環:

for (int i = 2; i <= length(A); ++i) ...

該行達到n次-初​​始化一次, n -1次增量測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM