好奇,内置的sorted()
函数是否会注意到列表已经排序并在常量时间内返回相同的列表?
x = [1, 2, 3, 4, 5]
y = sorted(x)
答案 0 :(得分:9)
没有。它将创建一个新列表,并按排序顺序添加现有列表中的值,在您的情况下已经排序。它将在O(n)
次中遍历整个现有列表,以获得长度为n
的列表。因此它不会在固定时间内返回列表。
sorted()
函数无法知道列表是否被排序,直到整个列表被它迭代,这显然不能在恒定时间内完成。
答案 1 :(得分:1)
无法确定列表是否按照固定时间排序,因此不能。
理论上,列表可以有一个名为sorted的布尔属性,每次修改列表时都会设置为False,并在排序时设置为True。对于通用列表类型,这是一个非常糟糕的主意。考虑清单[1,4,6,7]和[7,6,4,1]。是否应将这些中的任何一个视为有序哪一个或两个?