双向冒泡排序证明

时间:2016-11-09 18:20:05

标签: python algorithm bubble-sort

我参加了算法课程的介绍。作为家庭练习的一部分,我需要证明给定的双向冒泡排序算法是正确的。 我们必须遵循算法(在python中实现):

ListModel

我对主循环条件有点困惑。该算法是否能够达到左>> =右( >退出其中一个内部返回语句)的程度?

1 个答案:

答案 0 :(得分:1)

while left < right:
    swap = False
    left += 1
    right -= 1

leftright被初始化为数组的最左侧和最右侧索引,并且对于每次迭代,它无条件地朝向左右方向 - 无论下两个循环将发生什么。显然left >= right会发生并退出循环。

对于偶数长度的数组left > right和奇数长度的数组,将到达left == right并退出循环。

调试,您将自己获得。

修改

  

我需要证明给定的双向冒泡排序算法   正确

你可以试试这个片段吗?看来上面的实现是不正确的。

def bidirectional_bubble_sort(a):
    left = -1
    right = len(a)
    while left < right:
        swap = False
        left += 1
        right -= 1
        for i in xrange(left, right):
            if a[i] > a[i + 1]:
                t = a[i]
                a[i] = a[i + 1]
                a[i + 1] = t
                swap = True
        if not swap:
            return
        else:
            swap = False
        for i in xrange(right, left, -1):
            if a[i] < a[i - 1]:
                t = a[i]
                a[i] = a[i - 1]
                a[i - 1] = t
                swap = True
        if not swap:
            return