[英]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.