有序链表

时间:2013-01-25 22:56:17

标签: sorting linked-list

我想建立一个有序的链表。

如果我在将项目插入其中时对链接列表进行排序会更快(例如,请参阅下面的method #1),或者只是插入所有项目然后再对它们进行排序会更快吗?

方法#1

Rough pseudo - code:
for each node in the list
    if newNode is greater than current node
       continue;
    else
       insert the node here;

方法#2

Insert all items.
Sort the list at the end (using QuickSort)

2 个答案:

答案 0 :(得分:0)

这很大程度上取决于您要插入的数据。如果你以大致递减的顺序添加节点,那么显然在插入它们时对它们进行排序会更快,但如果它相反则会更慢。

它还取决于您在完成时对其进行排序所使用的排序算法。

一般来说,在选择排序算法方面,你有更多的双向链表选项。

此外,在某些应用程序中,始终对列表进行排序是可行的,以便您可以随时查询。如果您总是添加到列表的头部(或尾部),则每次添加内容时都必须对其进行重新排序。

您可能还需要考虑其他结构,例如二进制树,它们可以自行排序,以及添加/查找节点的时间与树的大小呈对数关系而不是线性(如链接列表)。

答案 1 :(得分:0)

理论上他们是一样的。

如果您首先选择(在添加时放置正确的空间)以找到合适的索引,则使用二进制搜索会花费O(log n)。考虑插入n个元素,最终会得到O(n log n)时间。

在第二个选项中,在插入所有O(n)元素之后,您将使用合并排序或快速排序在O(n log n)时间内对数组进行排序,这意味着O(n)+ O(n log n)= O(n log n)。

因此它们的成本相同,但我宁愿第一个避免额外的插入时间成本。