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