繁体   English   中英

为什么这种排序方法在Python中不起作用?

[英]Why doesn't this sorting method work in Python?

我有这段代码可以对列表进行排序,而无需在python中使用sorted函数。 输出与预期相反(从最大到最小而不是从最小到最大)

将<更改为>似乎有帮助,但是我不确定为什么会这样

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)

预期输出列表,该列表将变小到最大,但是得到相反的结果,除非我将<符号更改为>符号,但是我不确定为什么会这样?

尝试在纸上写算法的每个迭代:

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)):的内部循环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

我建议您阅读有关插入排序选择排序的信息,以更好地学习此算法。

问题是第二个循环再次遍历整个列表。 您要做的是改为查看其余元素:

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]较小时都会交换一次,因此最后您拥有最小的数字作为最后一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM