【问题标题】:Using sorting algorithms on a Queue?在队列上使用排序算法?
【发布时间】:2011-12-27 11:18:45
【问题描述】:

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

【问题讨论】:

  • 具体来说,您需要哪些帮助?
  • @OliCharlesworth 在我的排序算法中不知道在哪里入队或出队。
  • 一种简单的方法是将队列转储到普通数组中,对数组进行排序,然后将所有内容转移回队列中。
  • 你是对的。但这是一项任务,不允许这样做。
  • 队列有一个内在的顺序,这意味着它们不能被排序。您可以根据需要对底层数据结构进行排序,但这会使队列混乱。你的问题毫无意义。

标签: c++ sorting merge queue heap


【解决方案1】:

通常,队列按插入顺序排序 - 项目按它们插入队列的顺序排序。看来您想打破队列的基本品质。

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

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

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    相关资源
    最近更新 更多