我的代码不使用python中的sorted函数来对列表进行排序。输出结果与预期相反(从大到小,而不是从小到大)
将<更改为a>似乎有帮助,但我不确定为什么会这样
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
print(lista)
预期输出列表从小到大,但得到的结果与之相反,除非我将< sign to a>符号改为a>符号,但我不确定这是为什么?
发布于 2019-06-10 00:14:19
试着在纸上写下你的算法的每次迭代:
i = 0: 2 1 5 1 3 6
i = 1: 1 2 5 1 3 6
i = 2: 2 1 5 1 3 6
你的问题是,内部循环for l in range(len(lista)):
每次都从0开始,但是你必须从位置i开始,当你完成内部循环时,i递增到1,i之前的所有东西都已经排序了。如果内部循环从头开始重新启动,比如在本例中,1小于2(在i=1时),则再次交换它。
lista=[2,1,5,1,3,6]
for i in range(len(lista)):
for l in range(i, len(lista)):
if i==l:
continue
if lista[l]<lista[i]:
temp=lista[i]
lista[i]=lista[l]
lista[l]=temp
我建议您阅读有关insertion sort和selection sort的文章,以便更好地了解此算法。
发布于 2019-06-10 00:02:46
问题是第二个循环会再次遍历整个列表。您想要做的是查看其余的元素:
lista = [2, 1, 5, 1, 3, 6]
for i in range(len(lista)):
# change range to start at i
for l in range(i, len(lista)):
if i == l:
continue
if lista[l] < lista[i]:
temp = lista[i]
lista[i] = lista[l]
lista[l] = temp
编辑:更具体地说,想一想在外部循环的最后一次迭代中发生了什么。lista[i]
将是列表中的最后一个点,每次lista[l]
变小时都会交换,因此最终会得到最小的数字作为最后一个数字。
https://stackoverflow.com/questions/56516090
复制相似问题