INSERTION_SORT (A)
FOR j ← 2 TO length[A] //c1*n
key ← A[j] //c2*(n-1)
i ← j − 1 //c3*(n-1)
WHILE i > 0 and A[i] > key //c4*sigma(j=2 to n)of(tj)
A[i +1] ← A[i] //c5*sigma(j=2 to n)of(tj-1)
i ← i − 1 //c6*sigma(j=2 to n)of(tj-1)
A[i + 1] ← key //c7*(n-1)
c1,c2,c3,c7完全有道理。什么是没有意义的是为什么:
c4*sigma(j=2 to n)of(tj) becomes c4*sigma(j=2 to n)of(j)
让我们说我们正在计算一个大小为5的数组的最坏情况。上面一行说的是第4行的时间是:
c4*(1+2+3+4)
实际上它是:
C4 *((1)+(1 + 2)+(1 + 2 + 3)+(1 + 2 + 3 + 4))
我错过了什么?我知道这本书必须正确。
修改 搞砸了,应该是:
c4*((1)+(1+1)+(1+1+1)+(1+1+1+1))
=c4*(1+2+3+4)
答案 0 :(得分:1)
但第4行的时间是 2 + 3 + 4 + 5.第一次(j = 2),它是2(i = 1且i = 0)。第二次(j = 3),它是3(i = 2,i = 1,i = 0)......