假设您想在保持排序顺序的情况下将 n 个元素插入到一个空链表中。最坏情况下的时间是多少?
答案 0 :(得分:1)
如果,通过“维护排序顺序”,您的意思是它们已经排序,那么这是一个 O(n)
操作,因为您只需将它们中的每一个添加到列表的末尾(并且您可以保留一个记录当前结束而不是每次都搜索):
make new list from first value, keeping pointer to last, O(1)
for curr in second and subsequent values, O(n):
add to list using last, update last, O(1)
如果您的意思是它们没有排序,但它们应该排序,那就是O(n2)
,因为每个 n
新值将导致 O(n)
搜索后跟 O(1)
插入:
for curr in values, O(n):
find insertion point, O(n)
insert at that point, O(1)
答案 1 :(得分:0)
如果您在每次新插入元素后都进行排序,那么最坏情况下的时间复杂度将是 o(n^2)。 (插入需要 o(1),然后排序需要 o(n^2)。)
或者,如果您一次插入所有元素然后应用排序,则需要 o(nlogn)。(使用合并排序)