Python选择排序调试

时间:2014-01-21 03:31:24

标签: python python-3.x

我正在尝试编写选择排序功能。出现了一个错误,我不知道该怎么做 修复它。这是我的代码:

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']

1 个答案:

答案 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)