降序选择排序的输出不正确



我正在做一项作业,我真的很难弄清楚我做错了什么。我是Python的新手,老实说,到目前为止,我几乎不理解我拼凑的代码。

我目前拥有的是:

array=[int(n) for n in 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 40 20 10 30

我得到:

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

我需要的是:

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

请参阅下面的代码,在这里检查数组是否使用标志进行了排序,并在排序后停止对循环的处理,这将提高算法的时间复杂性。

array=[int(n) for n in input().split()]
for i in range(len(array)):
max_index = i
is_sorted = True
for j in range(i + 1, len(array)):
if int(array[j]) > int(array[max_index]):
max_index = j
is_sorted = False
if (is_sorted == True):
break
array[i],array[max_index] = array[max_index],array[i]
print(array)

输入:50 40 30 20 10(即已排序的数组,并将None打印为已排序的(

输出:

输入:10 20 30 40 50(即未排序的数组,它打印直到它排序并中断(

输出:
[50,20,30,40,10]

[50,40,30,20,10]

实际输出和预期输出之间的唯一区别是它额外输出一次排序后的数组。如果您希望在数组排序时停止排序,可以添加break语句来提前终止循环:

def is_sorted_descending(array):
for i in range(len(array) - 1):
if array[i] < array[i + 1]:
return False
return True
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)

if is_sorted_descending(array):
break

最新更新