链接列表排序插入与数组排序。哪个更快?

时间:2015-06-06 19:19:17

标签: arrays sorting linked-list

我有一个链接列表,它在插入元素时对它们进行排序,但是当我必须对20,000多个元素进行排序时,这有点慢。将所有元素添加到数组/链接列表然后对后续字词进行排序通常更快/更有效。这假设元素没有特定的顺序,因此它不会被部分排序。我觉得排序后会更快,因为你没有遍历列表20,000次,但我正在寻找更多的澄清。

1 个答案:

答案 0 :(得分:2)

正在使用的数据结构(Linked List vs Array)和您正在使用的实现非常重要。

使用数组

一次插入所有元素然后对其进行排序会快得多。这是因为在数组中间插入一个新元素将导致数组的其余部分被移位。 例如

将3插入[1,2,5,7,8]

将导致元素3插入第3个点(其中5个)。这将导致5被复制到第4个点,7个被复制到第5个点,8个被复制到第6个点。

每次按排序顺序插入元素时都会发生这种类型的混洗,这种情况很昂贵。

使用关联列表

在链接列表的情况下,我们用数组看到的那种改组不会发生,因为插入只需要更新前后元素的指针。例如。

将3插入1 -> 2 -> 5 -> 7 -> 8

将要求您将“next”元素指针更新为3,将“next”元素指针更新为3以指向5.元素1,7和8保持不变。

因此,无论是插入所有内容,还是一次排序或插入一个正确的位置,它的成本可能相同。

实施重要

这一切都是理论上的讨论。您使用的实施很重要。因此,您应该查看该实现的文档,以了解它如何实现这些操作。