执行期间输出降序选择排序输出列表不变

Posted

技术标签:

【中文标题】执行期间输出降序选择排序输出列表不变【英文标题】:Descending selection sort with output during execution outputs the list unchanged 【发布时间】:2022-01-23 05:36:46 【问题描述】:

编写一个程序,将整数列表作为输入,并使用选择排序将列表按降序排序。程序应该使用嵌套循环,并在外循环每次迭代后输出列表,从而输出列表 N-1 次(其中 N 是列表的大小)。

这就是我所拥有的,但输出只是按照输入的方式打印输入两次。我在这里做错了什么?

array = []
array.append(str(input(" ")))
    
for i in range(len(array)):
    max_index = i
    for j in range(i+1, len(array)):
        if array[j] > array[max_index]:
            max_index = j
    print(array)
    array[i],array[max_index] = array[max_index],array[i]
    
    print(array)

输入:

0 10 20 30 40

输出:

['0 10 20 30 40']
['0 10 20 30 40']

【问题讨论】:

您正在对包含单个字符串的列表进行排序。 这能回答你的问题吗? Get a list of numbers as input from the user 您的列表包含一个元素,即字符串'0 10 20 30 40'。它已经像以往一样有序。您需要在其上调用 .split() 以实际获取您似乎期望的 5 个项目的列表 - 如果您希望按数字而不是按字母顺序比较这些项目,然后在每个项目上调用 int() 我不熟悉 .split 命令。我将如何使用它?它是否允许读取输入并将其解释为数组,以便我可以按降序对数组进行排序? 【参考方案1】:

根据您的问题

我在这里做错了什么?

我将以这条线作为参考:

array.append(str(input(" ")))
>>> 0 10 20 30 40
print(array)
>>> ['0 10 20 30 40']

如您所见,输出的长度为 1。它只有一项是字符串。 您基本上将用户输入附加为单个字符串。因为您没有拆分输入中的项目。

解决方案

输入

 0 10 20 30 40 50

1.此解决方案返回一个字符串列表。

有关 int 的列表,请参阅下面的解决方案 2。

我只是根据您在问题中的输入拆分字符串。

另外,请注意我的列表比较,我将比较更改为 int。

array = []
array=input(" ").split(" ")

for i in range(len(array)):
    max_index = i
    for j in range(i+1, len(array)):
        if int(array[j]) > int(array[max_index]):
            max_index = j
    array[i],array[max_index] = array[max_index],array[i]

    print(array)

输出

['50', '10', '20', '30', '40', '0']
['50', '40', '20', '30', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']
['50', '40', '30', '20', '10', '0']

2.此解决方案返回整数列表。

在这里,我将拆分输入映射到数组中。

array = []
array=list(map(int, input(" ").split(" ")))

for i in range(len(array)):
    max_index = i
    for j in range(i+1, len(array)):
        if array[j] > array[max_index]:
            max_index = j
    array[i],array[max_index] = array[max_index],array[i]

    print(array)

输出

[50, 10, 20, 30, 40, 0]
[50, 40, 20, 30, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]
[50, 40, 30, 20, 10, 0]

【讨论】:

有没有办法让输出格式化为 [50, 10, 20, 30, 40, 0] * 从输出中删除撇号 [50, 40, 20, 30, 10, 0 ] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10, 0] [50, 40, 30, 20, 10 , 0] *在末尾打印新行 是的,让我快速编辑答案@JaredJennings

以上是关于执行期间输出降序选择排序输出列表不变的主要内容,如果未能解决你的问题,请参考以下文章

选择排序法将用户输入的数降序

选择排序,但我希望输出合并

[PTA]习题7-1 选择法排序

冲刺4--10

如何按第一位数字的降序对整数数组进行排序? [关闭]

[PTA]实验7-1-5 选择法排序