首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双向气泡排序证明

双向气泡排序证明
EN

Stack Overflow用户
提问于 2016-11-09 18:20:04
回答 1查看 429关注 0票数 0

我要上算法入门课。作为家庭练习的一部分,我需要证明给定的双向气泡排序算法是正确的。我们必须遵循以下算法(在python中实现):

代码语言:javascript
复制
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 - 1, left - 1, -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

我被主回路的情况弄糊涂了。算法是否达到了left>=right (之前的退出一个内部返回语句)的程度?

EN

回答 1

Stack Overflow用户

发布于 2016-11-09 18:25:38

代码语言:javascript
复制
while left < right:
    swap = False
    left += 1
    right -= 1

leftright被初始化为数组的最左和最右的索引,每一次迭代都无条件地向右和左方向移动,不管接下来的两个循环会发生什么。所以很明显,left >= right会发生并退出循环。

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

调试,您将得到它自己。

编辑

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

你能试试这个片段吗。上面的实现似乎是不正确的。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40513525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档