【问题标题】:What is wrong with this sorting code? Python这个排序代码有什么问题? Python
【发布时间】:2016-09-14 10:22:54
【问题描述】:

所以我应该输入一个数字 n,将 n 个数字添加到一个列表中,然后对列表进行排序并打印。

numCol=int(input());
vals=[];
for x in range(numCol):
    vals.append(int(input()))

for x in range(len(vals)):
    curr=vals[x];
    for y in range(x+1,len(vals)):
        if(curr>vals[y]):
            temp=vals[y];
            vals[y]=curr;
            vals[x]=temp;
print(vals);

代码无法正常工作。我们还没有真正彻底地学习排序算法,所以我只是在自己做,但我认为它类似于选择排序。无论如何,为什么不按升序打印值?

编辑:我输入 4,然后生成列表 4,3,2,1。输出为 [1,4,4,4]

【问题讨论】:

  • 提供样本输入、实际输出和预期输出
  • 这只是通过列表的一次...你需要继续直到你没有交换......你也可以用vals[x],vals[y]=vals[y],vals[x]交换python
  • 是否需要实现排序算法?因为实际的答案是使用内置的 Python 排序方法。
  • 我们必须创建自己的排序算法,但它可能类似于预制算法。我认为这是基于选择排序的。怎么只通过一次?

标签: python algorithm sorting


【解决方案1】:

问题是curr 应该在交换后更改。

for x in range(len(vals)):
    curr=vals[x];
    for y in range(x+1,len(vals)):
        if(curr > vals[y]):
            temp = vals[y]
            vals[y] = curr
            vals[x] = temp
            curr = vals[x] # <--

【讨论】:

  • 谢谢!做到了!我将如何相应地合并 curr、butt 更新?
  • @DChalo 根据你的代码,currvals[x] 的值,所以每当vals[x] 发生变化时,相应地更新curr
【解决方案2】:

修改这部分代码

 for x in range(len(vals)):
    curr=vals[x];
    for y in range(x+1,len(vals)):
        if(curr>vals[y]):
            temp=vals[y];
            vals[y]=curr;
            vals[x]=temp;

到这里:

for x in range(len(vals)):
    for y in range(x+1,len(vals)):
        if(vals[x]>vals[y]):
            temp=vals[y];
            vals[y]=vals[x];
            vals[x]=temp;

【讨论】:

  • 甜蜜!非常感谢
【解决方案3】:

您可以更轻松地以更 Python 的方式解决列表排序问题,只需使用 sort 命令,以下是一个示例:

import random

a=random.sample(range(30), 10)
print a
a.sort()
print a

【讨论】:

  • 谢谢!就是因为这个问题,我们不能使用内置算法
【解决方案4】:

不客气 -

numCol=int(input());
vals=[];
for x in range(numCol):
    vals.append(int(input()))

for x in range(len(vals)):
    for y in range(x+1,len(vals)):
    if(vals[x]>vals[y]):
        temp=vals[y]
        vals[y]=vals[x]
        vals[x]=temp
print(vals)

问题在于您没有更改 cur 的值以进行正确比较。

编辑 - 刚刚看到其他答案击败了我:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多