【问题标题】:Selection Sort Recursive Python选择排序递归 Python
【发布时间】:2015-08-13 14:57:28
【问题描述】:

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

【问题讨论】:

  • 能否请您添加更多关于它如何不工作的详细信息。比如,你期望什么输出,但你得到了什么输出,一些逻辑错误,或者类似的东西。
  • 不仔细阅读你的代码,对于选择排序这样简单的事情来说,这不是太长太复杂了吗?
  • 是的,但想法是使用尾递归来编写该算法!

标签: python recursion


【解决方案1】:

您的缩进错误,您没有返回任何内容 if lista[j] &lt; lista[menor] 为 False,因此您将 num_menor 设置为 None,因为所有不返回值的 python 函数默认返回 None 。

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]) -&gt; [3, 3, 4, 4, 5, 8] 失败,因此您需要进行一些调试。

【讨论】:

  • 其实是西班牙文!我来自哥斯达黎加!谢谢你的帮助!!
  • Err.. dedent 是什么? de-indent 的缩写?
  • @BhargavRao,坚持我,我会带你走上pyenlightenment的道路;)
  • 是的。自从我们第一次met :D
  • @BhargavRao,啊,当 12k+ 虚构的代表点只是一个梦想的时候!
猜你喜欢
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2018-11-26
  • 2019-05-09
  • 2019-03-09
  • 2013-12-27
相关资源
最近更新 更多