【问题标题】:C++ Insertion sort on a queue队列上的 C++ 插入排序
【发布时间】:2015-12-16 17:35:08
【问题描述】:

我正在尝试在不使用数组的情况下在两个队列上实现“插入排序”。

队列 1 - 4、5、11、8、3

队列 2 - 2、3、4、5、2、11

排序后如下:

队列 1 - 3、4、5、8、11

队列 2 - 2、2、3、4、5、11

它们被排序。但是我对队列进行排序,就像它是一个列表一样。我不知道如何处理 FIFO 结构。

我的老师说,如果是列表,我的实现是好的,但不是队列。我应该使用push()pop() 函数(已经实现了它们)和第三个队列寻求帮助。这是我当前的排序算法实现:

void InsertionSort(queue* &left, queue* &right)
{
    int x, i = 0, j;
    queue *p = left;
    while (p)
    {
        x = getElemAt(i, left, right);
        j = i - 1;
        while (j >= 0 && x < getElemAt(j, left, right))
        {
            setElemAt(j + 1, getElemAt(j, left, right), left, right);
            j--;
        }
        setElemAt(j + 1, x, left, right);
        p = p->next;
        i++;
   }
}

getElemAtsetElemAt 是我单独编写的附加函数。我应该如何解决使用额外队列进行排序的问题?

【问题讨论】:

  • 两个队列上的“插入排序”是什么意思?插入排序通常在单个数组上执行。你能给出一个输入和输出的例子,并说明你当前的代码有什么问题吗?
  • 好吧,我的任务说我有 2 个队列,需要排序。我当前代码的问题是我直接访问第二个和下一个元素,这在队列中是不可能的,因此我需要使用第三个队列来协助排序,以存储以前的/未排序/排序的元素。我不需要违反将队列作为第一个输入,第一个输出(FIFO)处理的规则
  • 我还是不明白排序两个队列是什么意思。这是否意味着单独排序每个?这似乎不是上面的代码所做的。
  • 我有 2 个队列,左右。它们正在使用上面的代码进行排序。
  • 是的,你已经重复了好几次了,但它仍然毫无意义。举例说明排序前后队列包含的内容怎么样?

标签: c++ sorting queue implementation insertion


【解决方案1】:

@interjay 队列需要单独排序,使用第三个辅助队列,当队列 1 或队列 2 被排序时使用。队列不能同时排序,因为这需要 2 个辅助队列

【讨论】:

  • 或者如果根据其中一个队列对两个队列进行排序,那么第三个队列可以用于元素对。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 2015-11-21
  • 1970-01-01
相关资源
最近更新 更多