【发布时间】:2017-05-31 05:35:03
【问题描述】:
我想知道对链表进行排序的目的是什么。因为如果需要在未排序的链表和排序的链表中查找元素,则必须做 O(n)。 如果我的问题很愚蠢,请原谅
【问题讨论】:
-
无。如果这是所需的用法,则应以排序方式维护该列表。对链表进行排序是计算机科学已知的最低效的操作之一。
标签: list data-structures linked-list
我想知道对链表进行排序的目的是什么。因为如果需要在未排序的链表和排序的链表中查找元素,则必须做 O(n)。 如果我的问题很愚蠢,请原谅
【问题讨论】:
标签: list data-structures linked-list
排序的目的并不总是以对数时间进行搜索。显然,排序数据还有很多其他应用。
假设,你必须从一个大的链表中去重复(删除重复的元素)并且你没有足够的空间将列表项加载到哈希表中,因为列表非常大。在这种情况下,您可以对列表进行排序并删除相同的连续元素,从而对列表进行重复数据删除。
如果你想将一个元素插入到排序容器中的适当位置,排序链表非常方便,它可以保证线性时间和恒定空间复杂度。但是对于数组,您需要使用一个临时数组,然后将所有元素一一移动。事实上LRU缓存是一个双向链表,并根据最近对项目的点击进行排序。新使用的项目和最近再次访问的旧项目插入前面,以保持已经排序的列表排序。如果在这里使用类似数组的结构,LRU 缓存无法提供恒定的复杂度
这只是一些经典的应用程序。您可以找到很多其他应用程序。
【讨论】:
让我们认为使用链表来实现优先级队列。我们可以随机添加不同优先级的元素,但是我们想根据优先级处理队列中的元素,维护一个排序的链表,使最高优先级的项目出现在开头,然后将它们从队列中删除,这将很有用。队列是一个简单的操作。这并不完全对列表进行排序,但是当插入项目时,它将根据优先级放置在正确的位置。这类似于数组的插入排序。
【讨论】: