【发布时间】:2019-09-18 22:29:18
【问题描述】:
目前我在学习视频时发现了此代码。然而,代码有一个被指出的缺陷,但我无法理解部分算法以及为什么该缺陷是一个“缺陷”。
i = len(numList) - 1
while i > 1:
j = 0
while j < i:
# If the value on the left is bigger switch values
if numList[j] > numList[j+1]:
temp = numList[j]
numList[j] = numList[j + 1]
numList[j + 1] = temp
else:
print()
j += 1
i -= 1
for k in numList:
print(k, end=", ")
print()
代码应该从数字列表中排序数字,但是我无法理解其中的两件事:
一个是“为什么从“i”中减去 1?
i = len(numList) - 1
第二,当算法的最后一个数字为“1”时,算法将无法正确排序数字。例如,“4, 2, 6, 3, 1” 的列表将被排序为“2, 1, 3, 4, 6”,而不是正确的“1, 2, 3, 4, 6”。 cmets的人指出,原因是应该是“while i > 0”或“while i >= 1”,而不是“while i > 1”。
while i > 1:
但是我无法理解为什么会这样。
【问题讨论】:
-
1 从 i 中减去,因为索引从 0 开始,所以最后一个索引的长度为 - 1。
-
while i > 0是正确的,因为那时j == 0,当numList[j] > numList[j+1]时你交换i=1和j=0索引,因此2 和1 将被翻转,你得到1,2 ,3,4,6
标签: python python-3.x bubble-sort