在队列上使用排序算法?

时间:2011-12-26 20:23:26

标签: c++ sorting merge queue heap

我正在使用基于单链接列表的队列抽象数据类型。我想以3种方式对Queue保存的数据进行排序:首先使用合并排序,第二种使用快速排序,第三种使用堆排序。所以有人可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

我只会用这个答案来涵盖合并排序。希望其他人可以覆盖其他算法,或者您可以自己推导出来。

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