我有这个Python代码,是一个递归形式的选择排序算法,但它不起作用,有人可以帮助我吗?
def selection(lista):
return selection_aux(lista,0,len(lista))
def selection_aux(lista,i,n):
if i == n or lista[0]==None:
return lista
else:
num_menor = menor_f(lista,i,n,i)
temporal = lista[i]
lista[i] = num_menor
print(num_menor)
lista[num_menor] = temporal
return selection_aux(lista,i+1,n)
def menor_f(lista,j,n,menor):
if j == n:
return menor
if lista[j] < lista[menor]:
menor = j
return menor_f(lista,j+1,n,menor)
测试:
>>> selection([1,2,3])
输出
lista[num_menor] = temporal
TypeError: list indices must be integers, not NoneType
答案 0 :(得分:2)
你的缩进是错误的,你没有返回任何if lista[j] < lista[menor]
是假的,所以你将num_menor
设置为None
因为所有不返回值的python函数没有默认值。
def menor_f(lista,j,n,menor):
if j == n:
return menor
if lista[j] < lista[menor]:
menor = j
return menor_f(lista,j+1,n,menor) # dedent
无法关注您的变量名称,因为我不会说法语,但更改适用于selection([4,3,2])
print(selection([4,3,2]))
[2, 3, 4]
selection([ 8,3,4,2,5,6]) -> [3, 3, 4, 4, 5, 8]
失败,因此您需要进行一些调试。