不管这是否是在Python中构造这种排序算法的最有效的方法(它不是),我对索引要求的理解/内置的“min”函数的性质不能解释下面代码中的下列错误:
错误:
builtins.indexeror:列表索引超出范围
代码如下:

#Create function to sort arrays with numeric entries in increasing order
def selection_sort(arr):
  arruns = arr #pool of unsorted array values, initially the same as 'arr'
  indmin = 0 #initialize arbitrary value for indmin.
  #indmin is the index of the minimum value of the entries in arruns
  for i in range(0,len(arr)):
    if i > 0: #after the first looping cycle
      del arruns[indmin] #remove the entry that has been properly sorted
      #from the pool of unsorted values.
    while arr[i] != min(arruns):
      indmin = arruns.index(min(arruns)) #get index of min value in arruns
      arr[i] = arruns[indmin]

#example case
x = [1,0,5,4] #simple array to be sorted
selection_sort(x)
print(x) #The expectation is: [0,1,4,5]

我已经看了几个其他的索引错误例子,并不能将我的问题归因于进入/退出我的while循环时发生的任何事情。我认为我对排序过程的映射是合理的,但我的代码甚至在上面分配给x的简单数组上失败。如果可以的话请帮忙。

最佳答案

arrarruns是相同的列表。您将从列表中删除项,减小其大小,但不更改i变量的最大值。
修复:

arruns = [] + arr

这将为arruns创建新数组

09-13 14:08