我需要能够按字母顺序对条目进行排序或插入。有没有办法做到这一点?
答案 0 :(得分:6)
mergesort对排序很好(当然,如果那就是你所要求的那样,已排序列表中的插入更简单了。)
答案 1 :(得分:2)
您可以在libc中使用qsort()函数。基本上,你将创建一个指向节点的指针数组,并编写一个节点比较函数......然后调用qsort(),最后按照qsort()指定的新顺序重新创建列表。
答案 2 :(得分:1)
可以为单链接列表实现quicksort
的版本,但通常这只是一个有趣的谜题,因为mergesort
更容易实现并且同样有效(或更好)用于排序链表。
答案 3 :(得分:1)
插入很简单,只需逐步浏览列表,直到找到正确的位置,将新节点放在那里(前一节点现在链接到新节点,新节点指向前一节点先前指向的节点)。 / p>
如果您已经有一个未排序的列表,则没有有效的方法在列表中对其进行排序,这意味着您必须创建第二个集合并在那里进行排序,例如使用二叉树或数组和快速排序。
答案 4 :(得分:1)
如果您的列表已经排序并且想要插入整批项目,那么最好在开头插入它们并在之后排序;如果你想插入只有几个项目,最好保持列表排序。
我的推理:
因此,上面的所有项目 记录N项或更多,只有少数项小于记录N项。
答案 5 :(得分:0)
您可能希望从手工排序开始,并了解如何排序,然后,看看是否可以使用伪代码编写。从那里可以很容易地将其转换为程序。
要获得家庭作业的帮助,如果您解释如何进行排序,显示一些不起作用的代码,并解释它应该做什么以及它正在做什么,这会有所帮助,然后您可以找到更多帮助即将。
由于您使用的是链接列表,如果您可以使用二叉树,那么二进制排序,特别是如果您可以在插入时进行排序,那将是您最好的选择。
答案 6 :(得分:0)
理想情况下,尝试在插入新项目时对链接列表进行排序。
但是,这个问题在以下StackOverflow帖子中以某种方式得到了回答:
Inserting a node into a linked list in constant-time?
How do you insert into a sorted linked list?
答案 7 :(得分:0)
这不是你应该重新实现的东西(除非这是一个家庭作业问题......)。我使用glib,它实现了一个链表和排序插入,所以你不必这样做。这是appropriate glib documentation。
答案 8 :(得分:0)
如果您的列表是双向链接的,您可以将其转换为二叉树,然后再次返回链接列表。
这不需要辅助存储。