对字符串的链接列表进行排序

时间:2015-06-21 15:36:41

标签: java list sorting linked-list mergesort

给定一个由单个空格标识的字符串,我需要将字符串中的每个单词转移到链接列表中的节点,并保持列表的词法排序(如在字典中)。

我做的第一步是遍历String,并将每个单词放在一个单独的Node中。现在,我很难对列表进行排序 - 必须以最有效的方式完成。

Merge-sort是nlogn。合并排序是最好的选择吗?

2 个答案:

答案 0 :(得分:1)

一般来说,如果你有一个列表并想要排序它合并排序是一个很好的解决方案。但在你的情况下,你可以做得更好。
你有一个用空格分隔的字符串,你打破它并把它放在列表的节点中。然后你想对列表进行排序 结合这两个步骤可以做得更好 1)有一个带有头尾的链表和指向前一节点的指针 2)当您从句子中提取单词时,按插入顺序存储列表中的单词。我的意思是你从列表的尾部或头部开始,取决于它是否大于或小于这些元素,然后继续前进,直到达到大于/小于当前元素的元素。将其插入该位置。你只需要更新指针。

答案 1 :(得分:0)

只需使用内置的Collections.sort,这是一个mergesort实现。更具体地说:

  

此实现是一个稳定的,自适应的迭代合并输出,当输入数组被部分排序时,它需要远远少于n lg(n)的比较,同时在输入数组随机排序时提供传统mergesort的性能。如果输入数组几乎已排序,则实现需要大约n次比较。临时存储要求从几乎排序的输入数组的小常量到随机排序的输入数组的n / 2个对象引用不等。