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

Python中的排序算法

Python中的排序算法,python,python-3.x,bubble-sort,Python,Python 3.x,Bubble Sort,目前我在学习视频时发现了这段代码。然而,代码有一个被指出的缺陷,但我无法理解算法的一部分,以及为什么该缺陷是一个“缺陷” i=len(numList)-1 当i>1时: j=0 而jnumList[j+1]: 温度=数值列表[j] numList[j]=numList[j+1] 数值列表[j+1]=温度 其他: 打印() j+=1 i-=1 对于numList中的k: 打印(k,end=“,”) 打印() 代码应该从数字列表中对数字进行排序,但是我无法理解其中的两件事: 一个是“为什么从“我”

目前我在学习视频时发现了这段代码。然而,代码有一个被指出的缺陷,但我无法理解算法的一部分,以及为什么该缺陷是一个“缺陷”

i=len(numList)-1
当i>1时:
j=0
而jnumList[j+1]:
温度=数值列表[j]
numList[j]=numList[j+1]
数值列表[j+1]=温度
其他:
打印()
j+=1
i-=1
对于numList中的k:
打印(k,end=“,”)
打印()
代码应该从数字列表中对数字进行排序,但是我无法理解其中的两件事:

一个是“为什么从“我”中减去1?”

i=len(numList)-1
第二,当算法的最后一个数字是“1”时,算法将不能正确地对数字排序。例如,“4,2,6,3,1”的列表将被排序为“2,1,3,4,6”,而不是正确的“1,2,3,4,6”。来自评论的人士指出,这是因为它应该是“whilei>0”或“whilei>=1”,而不是“whilei>1”

而i>1:
但我不明白为什么会这样

为什么从“i”中减去1

因为集合是零索引的。您有N个元素,但最后一个可索引值始终为
N-1

j
访问
numList[j+1]
时,当
j
处于其最大值时,
j==i-1
i
处于其最大值
len(numList)-1
,则访问
numList[(i-1)+=numList[i]==numList[len(numList)-1]
,这是最后可用的元素

两个和一个让我头疼的


而i>0
是正确的,因为在第一次迭代中,
i==1
j==0
,当
numList[j]>numList[j+1]
时交换
j+1==1
j==0
索引,因此2(索引1)和1(索引0)将被翻转,从
2,1,3,4,6

为什么从“i”中减去1

因为集合是零索引的。您有N个元素,但最后一个可索引值始终为
N-1

j
访问
numList[j+1]
时,当
j
处于其最大值时,
j==i-1
i
处于其最大值
len(numList)-1
,则访问
numList[(i-1)+=numList[i]==numList[len(numList)-1]
,这是最后可用的元素

两个和一个让我头疼的


而i>0
是正确的,因为在第一次迭代中,
i==1
j==0
,当
numList[j]>numList[j+1]
时交换
j+1==1
j==0
索引,因此2(索引1)和1(索引0)将被翻转,然后从
2,1,3,4,6
中得到
1,2,3,4,6
,算法通过切换邻居直到最大值“冒泡”,将第一个i+1数字的最大值带到前面(因此i+1位置)。 在第一次迭代中,i=len(numList)-1,因此整个numList的最大值 (索引从0开始,在len(numList)-1结束)被带到前面。 这是最大值,应该是最后一个。现在你只需要担心 第一个i-1值,因此i减少1。 因为i>1忘记了将第一个元素带到前面(第二个位置),所以示例中的2和1的顺序不正确,因为它们需要切换。 因此,您需要i=1迭代步骤

这里有一个很棒的网站,它可以帮助实现排序算法的可视化。
. 您的算法称为冒泡排序。

该算法通过切换邻居直到最大值“冒泡起来”,将前i+1个数字中的最大值带到前面(因此i+1位置)。 在第一次迭代中,i=len(numList)-1,因此整个numList的最大值 (索引从0开始,在len(numList)-1结束)被带到前面。 这是最大值,应该是最后一个。现在你只需要担心 第一个i-1值,因此i减少1。 因为i>1忘记了将第一个元素带到前面(第二个位置),所以示例中的2和1的顺序不正确,因为它们需要切换。 因此,您需要i=1迭代步骤

这里有一个很棒的网站,它可以帮助实现排序算法的可视化。
. 您的算法称为冒泡排序。

1是从i开始的,因为索引从0开始,所以最后一个索引的长度是-1。
而i>0
是正确的,因为然后
j==0
,当
numList[j]>numList[j+1]
时,您交换
i=1
j=0
索引,因此2和1将被翻转,得到1,2,3,4,61是从i开始的,因为索引从0开始,所以最后一个索引的长度是-1。
而i>0
是正确的,因为然后
j==0
,当
numList[j]>numList[j+1]
时,交换
i=1
j=0
索引,因此2和1 wolud被翻转,得到1,2,3,4,6