我参加了算法课程的介绍。作为家庭练习的一部分,我需要证明给定的双向冒泡排序算法是正确的。 我们必须遵循算法(在python中实现):
ListModel
我对主循环条件有点困惑。该算法是否能够达到左>> =右( >>退出其中一个内部返回语句)的程度?
答案 0 :(得分:1)
while left < right:
swap = False
left += 1
right -= 1
left
和right
被初始化为数组的最左侧和最右侧索引,并且对于每次迭代,它无条件地朝向左右方向 - 无论下两个循环将发生什么。显然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