2011-12-26 40 views
-1

我使用基于单链表的队列抽象数据类型。我想以三种方式对Queue保留的数据进行排序:首先用合并排序,第二用快速排序,第三用堆排序。那么有没有人可以提供帮助?在队列上使用排序算法?

+1

什么,具体而言,你需要帮助? – 2011-12-26 20:33:55

+0

@OliCharlesworth不知道在排序算法中排队或去哪里排队。 – noDispName 2011-12-26 20:39:18

+0

一个简单的方法是将队列转储到普通数组中,对数组进行排序,然后将所有内容都传回到队列中。 – 2011-12-26 20:41:03

回答

0

通常,队列按插入顺序排序 - 项目按其插入队列的顺序排序。看起来你想打破队列的基本质量。

我只打算用这个答案来覆盖合并排序。希望其他人会覆盖其他算法,或者你可以自己派生它们。

只需知道一个列表何时结束,另一个列表何时开始,单个链接列表就可以视为列表列表。对于合并排序,您需要从排序列表开始 - 如果每个列表的长度都为1,则排序只是因为没有其他顺序是可能的。将两个链表合并成一个很容易 - 从两个列表中选取最小的项目并将其链接到一个新列表,直到两个列表都用尽。因此,对于第一遍,您将列表分为长度为1的子列表,并将它们组合为长度为2的子列表。第二遍将长度为2的子列表合并为长度为4的子列表。每次传递将有序子列表的大小加倍。当排序的子列表的大小大于或等于整个列表的大小时,您就完成了。