algorithm - 使用递归对队列进行排序

标签 algorithm sorting queue

问题是这样的:

您需要在添加到队列的新成员方法 void sort() 中对队列进行排序。

规则是:

  • 你不能使用任何循环。只允许递归。
  • 您可以根据需要创建任意数量的私有(private)方法。
  • 您可以创建和使用两个同类的辅助队列(称之为队列 - 具有默认构造函数)。
  • 你对队列的内部结构一无所知。
  • 提供给您的唯一方法是:bool empty()、Data peek()、Data dequeue()、void enqueue(Data d)
  • 如果列表为空,
  • dequeue() 返回 null,enqueue() 忽略 null 输入。
  • 排序顺序需要升序(队列前面的值应该是最小的)。
  • 可比较的值是Data结构中的整数,称为x

我知道可以解决。我还没有找到答案。任何想法将不胜感激。

最佳答案

开始对 N=2 个元素的队列进行排序。

现在 - 解决这个问题后 - 如果对 N 个元素进行排序,则改进对 N+1 个元素进行排序的解决方案。


更新:

现在,在你完成作业后,我可以在 scala 中展示一个替代解决方案:

   private def insert (a: Int): Unit = {
     if (isEmpty || a <= peek) enqueue (a)
     else {
       val h = dequeue 
       insert (a)
       enqueue (h)
     }
   }
   
   def sort (): Unit = 
    if (! isEmpty) {
      val head = dequeue
      sort 
      insert (head)
    }

它在没有明确的第二个队列的情况下工作。插入是一个 sortedInsert。

val q = new Queue (List (4))
q.enqueue (7)
q.enqueue (9)
q.enqueue (8)
q.enqueue (2)
q.enqueue (3)

val x = q.debug 
x: List[A] = List(3, 2, 8, 9, 7, 4)

q.sort 
val x = q.debug 
x: List[A] = List(2, 3, 4, 7, 8, 9)

我使用列表来实现队列,但仅将其用于创建新队列和调试原因。避开也没什么大不了的,只是速度更快,我想先从排序开始。 :)

关于algorithm - 使用递归对队列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9077789/

相关文章:

algorithm - 插入排序和冒泡排序的比较

algorithm - 折线的优雅 "Left-of"测试

algorithm - 在图中寻找循环的高效算法

c++ - 寻找最小字典顺序数组

python - 来自一个多处理管理器的多个队列

algorithm - 如何在层次结构中定位数据项位置?

python - 如何在Python中获取除某些值之外的排序数组的索引?

python - Collections.Counter 如何实现快速排序?

使用队列和链表的 Groovy 示例应用程序

javascript - 在 jquery 中编写一个全局动画队列