我正在尝试编写选择排序功能。出现了一个错误,我不知道该怎么做 修复它。这是我的代码:
def selection_sort(numbers):
outlist=[]
for i in range(len(numbers)-1):
minIndex=i
for j in range(i+1,len(numbers)):
if numbers[j]<numbers[minIndex]:
minIndex=j
numbers[minIndex],numbers[i]=numbers[i],numbers[minIndex]
numbers = [str(i) for i in numbers]
#print(numbers)
outlist.append(numbers)
#print(outlist)
return outlist
我希望得到一个输出列表。在此列表中,有许多列表显示函数如何对输入应用更改。 但是我把每一步('数字')放在'outlist'之后。我无法得到我想要的东西:出局名单的顺序不正确。
以下是我使用的测试用例:
输入:
43 42 18 14 3 45 24 14 50 26
输出:
3 14 18 42 43 45 24 14 50 26
3 14 14 42 43 45 24 18 50 26
3 14 14 18 43 45 24 42 50 26
3 14 14 18 24 45 43 42 50 26
3 14 14 18 24 26 43 42 50 45
3 14 14 18 24 26 42 43 50 45
3 14 14 18 24 26 42 43 50 45
3 14 14 18 24 26 42 43 45 50
3 14 14 18 24 26 42 43 45 50
但它假设如下:
3 42 18 14 43 45 24 14 50 26
3 14 18 42 43 45 24 14 50 26
3 14 14 42 43 45 24 18 50 26
3 14 14 18 43 45 24 42 50 26
3 14 14 18 24 45 43 42 50 26
3 14 14 18 24 26 43 42 50 45
3 14 14 18 24 26 42 43 50 45
3 14 14 18 24 26 42 43 50 45
3 14 14 18 24 26 42 43 45 50
此外,在我添加'print(numbers)'之后,它表明在我将'数字'放入'outlist'之前,每一步都是正确的:
['3', '42', '18', '14', '43', '45', '24', '14', '50', '26']
['3', '14', '18', '42', '43', '45', '24', '14', '50', '26']
['3', '14', '14', '42', '43', '45', '24', '18', '50', '26']
['3', '14', '14', '18', '43', '45', '24', '42', '50', '26']
['3', '14', '14', '18', '24', '45', '43', '42', '50', '26']
['3', '14', '14', '18', '24', '26', '43', '42', '50', '45']
['3', '14', '14', '18', '24', '26', '42', '43', '50', '45']
['3', '14', '14', '18', '24', '26', '42', '43', '50', '45']
['3', '14', '14', '18', '24', '26', '42', '43', '45', '50']
答案 0 :(得分:1)
注意深度摄影
import copy
def selection_sort(numbers):
outlist=[]
for i in range(len(numbers)-1):
minIndex=i
min_value = numbers[minIndex]
for j in range(i+1,len(numbers)):
if numbers[j]<numbers[minIndex]:
minIndex=j
numbers[minIndex],numbers[i]=numbers[i],numbers[minIndex]
outlist.append(copy.deepcopy(numbers))
# print(outlist)
return outlist
if __name__ == "__main__":
num = [ 6, 9, 2,5,4,3,1,7]
print selection_sort(num)