无论这是否是用Python构建这种排序算法的最有效方法(它不是),我对索引要求的理解/内置“min”的性质。函数未能解释以下代码中的以下错误:
错误: builtins.IndexError:列表索引超出范围
以下是代码:
#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的简单数组上失败了。请帮忙。
答案 0 :(得分:4)
arr
和arruns
是相同的列表。您正在从列表中删除项目,减小其大小,但保持i
变量的最大值不变。
修正:
arruns = [] + arr
这将为arruns