链表的时间复杂度是多少?

时间:2021-06-27 06:19:00

标签: c data-structures linked-list

假设您想在保持排序顺序的情况下将 n 个元素插入到一个空链表中。最坏情况下的时间是多少?

2 个答案:

答案 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)。(使用合并排序)