【发布时间】: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++;
}
}
getElemAt 和setElemAt 是我单独编写的附加函数。我应该如何解决使用额外队列进行排序的问题?
【问题讨论】:
-
两个队列上的“插入排序”是什么意思?插入排序通常在单个数组上执行。你能给出一个输入和输出的例子,并说明你当前的代码有什么问题吗?
-
好吧,我的任务说我有 2 个队列,需要排序。我当前代码的问题是我直接访问第二个和下一个元素,这在队列中是不可能的,因此我需要使用第三个队列来协助排序,以存储以前的/未排序/排序的元素。我不需要违反将队列作为第一个输入,第一个输出(FIFO)处理的规则
-
我还是不明白排序两个队列是什么意思。这是否意味着单独排序每个?这似乎不是上面的代码所做的。
-
我有 2 个队列,左右。它们正在使用上面的代码进行排序。
-
是的,你已经重复了好几次了,但它仍然毫无意义。举例说明排序前后队列包含的内容怎么样?
标签: c++ sorting queue implementation insertion