Python冒泡排序代码说明

时间:2012-12-03 12:29:59

标签: python sorting bubble-sort

我是Python新手。我们如何逐步解释这个代码。我无法理解某些部分。

myList=[43,21,12,80,3,2,35]
end=len(myList)-1
while (end!=-1):
    swapped=-1
    for i in range(0,end):
        if myList[i]>myList[i+1]:
            temp=myList[i]
            myList[i]=myList[i+1]
            myList[i+1]=temp
            swapped=i
    end=swapped
print(myList)

2 个答案:

答案 0 :(得分:1)

使用while True会创建无限循环如果您忘记添加会破坏循环的代码。在这种情况下,只有在for循环结束时swapped仍为-1时才会发生中断。因此,以下代码:

myList=[43,21,12,80,3,2,35]
end=len(myList)-1
while True:
    swapped=-1
    for i in range(0,end):
        if myList[i]>myList[i+1]:
            temp=myList[i]
            myList[i]=myList[i+1]
            myList[i+1]=temp
            swapped=i
    if swapped == -1:
        break
print(myList)

如果计算此示例的行数并将其与原始行进行比较,则会看到原始行短一行。 在我看来,检查值是比使用while True:(或while False:更好的工作方式)。

答案 1 :(得分:1)

我认为你的所有问题都已得到解答(他们在(真)=无限循环时)和交换的行为被排序'标志。

在python中非常酷的一件事是你不需要像在c中那样使用临时变量,所以你可以将if语句改为:

if myList[i]>myList[i+1]:
    myList[i+1], myList[i] = myList[i], myList[i+1]
    swapped=i

if myList[i]>myList[i+1]:
    j = i + 1
    myList[j], myList[i] = myList[i], myList[j]
    swapped=i

如果您不想两次计算i + 1

还要注意range(0,-1)返回一个空列表而不是抛出异常