选择排序递归Python

时间:2015-05-30 21:41:18

标签: python recursion

我有这个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

1 个答案:

答案 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]失败,因此您需要进行一些调试。