我想建立一个有序的链表。
如果我在将项目插入其中时对链接列表进行排序会更快(例如,请参阅下面的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)
答案 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)。
因此它们的成本相同,但我宁愿第一个避免额外的插入时间成本。