【发布时间】:2022-01-04 05:04:49
【问题描述】:
def sort(L,Lsorted):
if len(L)==1:
return Lsorted.append(L[0])
a = min(L)
Lsorted.append(a)
L.remove(a)
return sort(L,Lsorted)
这个想法是每次删除 L 的最小元素并附加到另一个列表,然后最后返回另一个列表。
当我这样做时,此代码返回 None:
if __name__=='__main__':
L = [9,1,11]
L1 = []
print(sort(L,L1))
【问题讨论】:
-
哎呀我的算法复杂度。虽然
append是摊销常数,但min和remove都是线性的,并且由于您反复调用它们,因此变成O(n²)。假设栈没有先溢出。 -
当您可以简单地从现有列表创建一个新列表,然后按您需要的任何方向对其进行排序时,这些操作的意义是什么。如我错了请纠正我。除非它不是关于自我训练。
-
如果你刻意研究排序,看看:heapsort(最简单,但不稳定),mergesort(简单,但需要额外内存),quicksort(通常最快,但最坏情况非常糟糕) ; 不稳定);插入排序(二次,但它对于小列表来说是一个如此小的常数因子),选择排序(二次,与您正在尝试的内容模糊相似),冒泡排序(二次,通常人们如何天真地尝试对事物进行排序)。存在其他算法及其变体,但需要权衡取舍。
标签: python list sorting recursion