我正在通过常规采样算法described here实现并行排序。我陷入了一个问题,我需要将已排序的子列表迁移到已排序数组的适当位置。问题可以这样说:有一个全局数组。该数组已被分为p个子数组。每个子数组都被排序。确定p-1个全局枢轴元素,并将每个子阵列分成p个子子阵列(黄色,红色,绿色)。现在我需要移动那些子子数组,以便具有本地索引i的子子数组位于线程i中(因此它们以这样的方式排序,其中颜色是相邻的,并且从左到右的顺序保持不变)。
实际上串行算法会做,但我不知道如何获得正确的排列。下图显示了p = 3个线程的情况。黄色表示子子阵列0,红色-1,绿色-2。
子子阵列可能有不同的大小。
答案 0 :(得分:0)
好吧好像我没有足够的声誉来评论你的问题,所以我将采取发布答案的路线。
所以让我直截了当。你被困在这个算法的第3阶段。对?
这个怎么样:
让我们拥有p链接的索引列表。让每个进程将索引范围传递给进程i;在传递索引时,将索引附加到进程i的列表。当所有通信都结束时,您应该在进程i列表中拥有进程i的所有索引。此列表的节点应该是像
这样的数据结构 Node {
index
valueOfIndex
}
现在填充列表时,也要在列表中复制其值。
完成整个过程后。您可以使用其列表i为进程i重新调整数组。
????