Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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_Python 3.x_Loops_Bubble Sort - Fatal编程技术网

Python冒泡排序循环问题

Python冒泡排序循环问题,python,python-3.x,loops,bubble-sort,Python,Python 3.x,Loops,Bubble Sort,所以,我以前(在学校里)有点用python编程,但最近我又重新开始了。我有两个不同的for循环,一个是我自己做的(不起作用,已经散列出来),另一个是有效的(在它上面的一行) 我想知道为什么散列出来的代码在冒泡排序函数中不起作用,它仍然循环相同的次数,但由于某种原因,在计算循环次数时,99将慢慢移动到最后。但是,当倒计时时,它将在一个步骤中完成此操作。这是密码 import random unsorted_list = [2, 99, 95, 59, 54, 84, 6, 77, 45, 26]

所以,我以前(在学校里)有点用python编程,但最近我又重新开始了。我有两个不同的for循环,一个是我自己做的(不起作用,已经散列出来),另一个是有效的(在它上面的一行)

我想知道为什么散列出来的代码在冒泡排序函数中不起作用,它仍然循环相同的次数,但由于某种原因,在计算循环次数时,99将慢慢移动到最后。但是,当倒计时时,它将在一个步骤中完成此操作。这是密码

import random

unsorted_list = [2, 99, 95, 59, 54, 84, 6, 77, 45, 26]
print("The unsorted list is given as = ",unsorted_list)

def Bubble_sort(random_list):  
    Len_list = len(random_list)
    for pass_number in range(Len_list-1,0,-1):
    #for pass_number in range(0,Len_list,1):
        print(pass_number)
        print(random_list)
        for A in range(pass_number):
            if random_list[A] > random_list[A+1]:
                temp = random_list[A]    
                random_list[A] = random_list[A+1]
                random_list[A+1] = temp

Bubble_sort(unsorted_list)

我分别运行两个不同循环的结果截图可以在下面的链接中看到。链接1是倒计时(正确的方式),链接2是倒计时(不正确的结果),但我不知道它们为什么不正确

我的问题是为什么它不能双向运行

谢谢你的帮助


Extra info=在python 3.9.0中,只有一个外部循环与内部循环正确重叠

该内部循环有一个明确的功能:它将最大值向下移动到位置
pass\u number
,一次交换一次。任何其他进展都是副产品;关键的结果是最大的因素

当您从列表末尾的
pass\u number
开始时(实际上,短一个:
A+1
就是末尾),程序运行正常:第一个过程移动到
99
末尾;下一个移动到它旁边,依此类推

重要的是要注意相反的移动:小值在每次传递时只能向左移动一个位置

当您只反转一个循环时,您现在拥有的是一个组合,它将使某些工作正确,但几乎肯定会失败。直到最后一次迭代,您才接触列表中的最后一个元素;除非最后一个元素恰好是两个最大元素中的一个,否则它就无法找到合适的位置。仅在最终迭代时才参考它

如果你想逆转这个过程,那好吧——这样做。当您反转对pass_数的计数时,还必须反转对内部循环的限制,以便第一次迭代按顺序考虑整个列表


你能从那里拿走吗?找出内部循环的变化是一个很好的介绍练习。

是的,我应该可以从这里开始,这非常有帮助,谢谢。记住选择一个“最佳答案”,这样就可以存档这个问题——我想你会得到几分。