我目前正在阅读 TCRC Introduction to Algorithms 3rd edition 教科书的第 2 章,并且正在阅读作者对该算法的循环不变量的解释。我理解作者的初始化和维护逻辑。然而,终止是我有点陷入困境的。作者声称在终止时,j = n + 1。然而,在算法的伪代码中,j 从 2 循环到 n。所以不应该 j = n - 1 吗?
编辑:这本书的插入排序伪代码是:
for j = 2 to A.length
key = A[j]
// Insert A[j] into sorted sequence A[1...j - 1]
i = j - 1
while i > 0 and A[i] > key
A[i + 1] = A[i]
i = i - 1
A[i + 1] = key
编辑:仔细阅读后,我终于明白了为什么 j = n + 1 在终止期间。这是因为 for 循环从 2 变为 n(包括),所以在 j 超过 n 之后,循环终止,因此在终止时 j = n + 1。我很感激帮助。