BUBBLESORT(A)
1 for i=1 to length(A)
2 do for j=length(A) downto i+1
3 do if A[j] < A[j-1]
4 then exchange A[j]<->A[j-1]
(1)对2-4行给出精确的循环不变式。
a:初始化
循环开始前,j=length(A),考虑的数组范围中只有一个元素,它是有序的。
b:保持
在循环中,j=m成立,则j=m+1也成立。当j=m时,最小的元素一定是A[j],因为在已考虑的范围length(A) to m中,最小的元素已被移动至m,因此A[m]最小。在第3行,如果A[j]比A[j-1]小,则会进行二者交换,否则认为最小元素为A[j-1]。
c:终止
当j=i+1,则循环结束,最小的元素一定在A[i]。
(2)对1-4行给出精确的循环不变式。
a:初始化
循环开始前,i=1,数组A元素最小在i,算法成立。
b:保持
当i=j时,位于i to length(A)之间的最小元素会被调整至i,数组元素有序性仍然保持。
c:终止
当循环终止,所有元素被移动至正确位置。