冒泡算法的准确性

来源:互联网 发布:淘宝刷浏览单app 编辑:程序博客网 时间:2024/05/05 09:44

 

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:终止

       当循环终止,所有元素被移动至正确位置。

原创粉丝点击