def sort_list(lst):
result = []
result.append(lst[0])
for i in range(1,len(lst)):
insert_list(lst[i], result)
return result
def insert_list(x, lst):
a = search(x, lst)
lst.insert(a, x)
return lst
def search(x, seq):
for i in seq:
if x<i:
return seq.index(i)
elif x == i:
return seq.index(i)
elif x>seq[-1]:
return (seq.index(seq[-1]))+1
此代码的时间复杂度是否为O(n)?
答案 0 :(得分:0)
取决于'insert_list'的复杂性。在这种情况下,由于insert_list在for循环中,复杂性将是n *(insert_list的复杂性)。
答案 1 :(得分:0)
如果循环花费n个单位时间,因为列表中有n个元素,每个剩余步骤有一个单位时间。总时间为1 + 1 + n *(insert_list的时间)+1 = n *(insert_list的时间)+3。
同样,时间复杂度还取决于insert_list步骤。
考虑这一步,
a = search(x,lst)
它有两个部分,搜索和分配。 让我们进行线性搜索。它的时间复杂度是O(n)。 所以对于insert_list函数所用的时间是(搜索)+(赋值)+(插入)= n + 1 + 1 = n + 2
所以总时间= n *(n + 2)+3 = n ^ 2 + 2n + 3
由于O(n)是渐近符号,因此n被视为非常大的值。在那种情况下,可以省略2n和3。所以时间复杂度是O(n ^ 2),这是多项式时间复杂度。