首页 > 解决方案 > 使用冒泡排序

问题描述

我想创建一个使用冒泡排序技术对数组进行排序的程序,但只发生第一次迭代。我需要帮助理解为什么会这样。

a=[10,4,5,2,0,6]
def srt(element):
    element1=element[:]
    element2=element[:]
    idx=1
    for x in element:
        for y in element2[idx:]:
             if x>y:
                element1[idx]=x
                element1[idx-1]=y
                print(element1)
                idx+=1
             else:
                pass 

我想显示排序的所有步骤

标签: pythonbubble-sort

解决方案


您的代码在语义上是错误的。你不是在比较相邻的元素。

你的代码...

for x in element:
            for y in element2[idx:]:
                 if x>y:

将列表的第一个元素与列表中从 idx 开始的所有其他元素进行比较。

冒泡排序通过比较相邻元素并在每次遍历时将最大/最小元素“冒泡”到列表末尾来工作。

在 interactivepython.org 上找到的这段代码通过从列表的开头迭代到(len of list) - (number of iterations)第一次传递,它将最大的元素冒泡到列表的末尾。在第二次通过时,它将第二大元素冒泡到列表中倒数第二个位置......依此类推。

def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1):
        for i in range(passnum):
            if alist[i]>alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort.html


推荐阅读