【问题标题】:Linked list sorted insert vs. Array Sort. Which is faster?链表排序插入与数组排序。哪个更快?
【发布时间】:2015-06-06 19:19:17
【问题描述】:
我有一个链表,可以在插入元素时对其进行排序,但是当我必须对 20,000 多个元素进行排序时,这有点慢。将所有元素添加到数组/链表然后排序后缀通常更快/更有效吗?这是假设元素没有特定的顺序,因此不会部分排序。我觉得排序会更快,因为您没有遍历列表 20,000 次,但我正在寻找更多说明。
【问题讨论】:
标签:
arrays
sorting
linked-list
【解决方案1】:
使用的数据结构(链表 vs 数组)和您使用的实现非常重要。
使用数组
一次性插入所有元素然后排序会快得多。这是因为在数组中间插入一个新元素会导致数组的其余部分移动。
例如
将 3 插入[1,2,5,7,8]
将导致元素 3 插入到第 3 个位置(其中 5 是)。这将导致 5 被复制到第 4 点,7 被复制到第 5 点,8 被复制到第 6 点。
每次您按排序顺序插入元素时都会发生这种类型的改组,这很昂贵。
带链表
在链表的情况下不会发生我们在数组中看到的那种洗牌,因为插入只需要您更新前后元素的指针。例如
将 3 插入1 -> 2 -> 5 -> 7 -> 8
将要求您将“下一个”元素指针更新为 3,并将 3 的“下一个”元素指针更新为指向 5。元素 1、7 和 8 保持不变。
因此,无论您插入所有内容,然后在正确位置一次排序或插入一个,成本可能相同。
实施很重要
所有这些都是理论上的讨论。您使用的实现很重要。因此,您应该查看该实现的文档以了解它是如何实现这些操作的。