已排序列表上的sorted()运行时间?

时间:2017-03-13 15:37:39

标签: python

好奇,内置的sorted()函数是否会注意到列表已经排序并在常量时间内返回相同的列表?

x = [1, 2, 3, 4, 5]
y = sorted(x)

2 个答案:

答案 0 :(得分:9)

没有。它将创建一个新列表,并按排序顺序添加现有列表中的值,在您的情况下已经排序。它将在O(n)次中遍历整个现有列表,以获得长度为n的列表。因此它不会在固定时间内返回列表。

sorted()函数无法知道列表是否被排序,直到整个列表被它迭代,这显然不能在恒定时间内完成。

答案 1 :(得分:1)

无法确定列表是否按照固定时间排序,因此不能。

理论上,列表可以有一个名为sorted的布尔属性,每次修改列表时都会设置为False,并在排序时设置为True。对于通用列表类型,这是一个非常糟糕的主意。考虑清单[1,4,6,7]和[7,6,4,1]。是否应将这些中的任何一个视为有序哪一个或两个?