闵溪端 2022-11-26 16:00 采纳率: 91.7%
浏览 5
已结题

python双向冒泡

双向冒泡:①从左往右,交换相邻的元素,从而达到循环一边可以把最大的元素放在右边;②从右往左进行冒泡,从而把小的元素放在左边。循环直至排序结束。
用代码块功能插入代码,请勿粘贴截图
def bubbleSort(alist):
    for passnum in range(len(alist)-1, 0, -1):
        for i in range(passnum):
            if alist[i] > alist[i+1]:
                alist[i], alist[i+1] = alist[i+1], alist[i]

alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
bubbleSort(alist)
print(alist)


def shortBubbleSort(alist):
    exchanges = True
    passnum = len(alist)-1
    while passnum > 0 and exchanges:
       exchanges = False
       for i in range(passnum):
           if alist[i]>alist[i+1]:
               exchanges = True
               alist[i], alist[i + 1] = alist[i + 1], alist[i]
       passnum = passnum-1


alist = [20, 30, 40, 90, 50, 60, 70, 80, 100, 110]
shortBubbleSort(alist)
print(alist)

我的解答思路和尝试过的方法
我想要达到的结果双向冒泡:①从左往右,交换相邻的元素,从而达到循环一边可以把最大的元素放在右边;②从右往左进行冒泡,从而把小的元素放在左边。循环直至排序结束。
  • 写回答

2条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-11-26 18:00
    关注
    def biBubbleSort(alist):
        exchanges = True
        l = len(alist)
        passnum = l-1
        while passnum > l//2 and exchanges:
            exchanges = False
            for i in range(l-passnum-1, passnum):
                if alist[i]>alist[i+1]:
                    exchanges = True
                    alist[i], alist[i + 1] = alist[i + 1], alist[i]
                j = l-i-1
                if alist[j-1]>alist[j]:
                    exchanges = True
                    alist[j], alist[j-1] = alist[j-1], alist[j]
            passnum = passnum-1
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月4日
  • 已采纳回答 11月26日
  • 创建了问题 11月26日

悬赏问题

  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信