为什么此插入排序算法输出无?

时间:2018-09-11 21:23:55

标签: python algorithm sorting insertion-sort

def insertion_sort(list):
    for index in range(1,len(list)):
        value = list[index]
        i = index - 1
        while i>=0:
            if value < list[i]:
                list[i+1] = list[i]
                list[i] = value
                i = i - 1
            else:
                break

a = [7,1,3,5,9,2,3]

print(insertion_sort(a))

此代码取自Khan Academy video。但是,当我尝试自己在Jupyter Notebook和IDLE上运行它时,都将输出None。我无法从视频中弄清楚为什么如此。 预先感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您的函数在任何地方都没有return语句。如果某个函数未明确return,则它始终返回None

几乎可以肯定,此函数不返回任何内容。


请注意,该函数就地改变了其参数:

>>> a = [7,1,3,5,9,2,3]
>>> insertion_sort(a)
>>> a
[1, 2, 3, 3, 5, 7, 9]

在Python中,执行此操作的函数不返回任何内容是惯用法。例如,请参见内置方法,例如list.sortlist.append

请注意,in the cited video正是老师的工作,他们不是print的{​​{1}}结果,他们只是调用它,然后查看变量。


一般来说,像这样的就地改变值的函数采用命令式动词,例如列表方法sort,而使参数不变但返回转换后的值的函数采用过去分词,例如内置函数sorted

因此,如果将此函数命名为insertion_sort,Python程序员将期望它不理会参数并返回一个新的,已排序的列表。由于它的名称为insertion_sorted,因此他们希望它能够对参数进行就地排序,并且不返回任何内容。