Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python气泡排序代码解释_Python_Sorting_Bubble Sort - Fatal编程技术网

Python气泡排序代码解释

Python气泡排序代码解释,python,sorting,bubble-sort,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]

我是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)
如果您忘记添加会破坏循环的代码,那么使用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)
如果您计算本例的行数,并将其与原始行进行比较,您将看到原始行比原始行短1行。
在我看来,检查一个值比使用while:True:或while:False更有效。

我想你所有的问题都已经得到了回答,whileTrue=infinite循环,swapped充当“is sorted”标志

python中非常酷的一点是,您不需要像在c中那样使用temp变量,因此可以将if语句更改为:

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

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


还要注意,range0,-1返回一个空列表,而不是抛出异常。你到底不明白什么?是你遇到问题的算法,还是代码本身?对不起,我也是stackoverflow的新手。我对算法没有问题。例如,在while循环中,我们不能说whileTrue而不是whileend=-1,为什么我们要使用swapped=-1。谢谢lot@flopoe你能告诉我们你最初是从哪里得到这个代码的吗?此外,-1还起到了哨兵的作用:如果代码在传递过程中没有更改为索引,则表示整个列表已排序。作者使用了-1,因为它不是一个正常的列表索引。非常感谢我理解了最后一个问题,为什么我们需要swapped=I?@flopoe,因为swapped以-1开始,并被分配到end,如果删除了交换的行,那么在1次迭代后退出循环,巧妙的是,如果没有交换任何内容,那么列表会明显排序,我们就完成了
if myList[i]>myList[i+1]:
    j = i + 1
    myList[j], myList[i] = myList[i], myList[j]
    swapped=i