奇数 - 偶数合并两个任意大小的排序列表

时间:2012-02-23 19:10:18

标签: algorithm sorting mergesort

我有以下场景:我有两个(先前)排序的数字序列,我需要使用合并网络(例如batcher的http://bit.ly/ytbmqE)合并它们。但是,这些网络设计用于2 ^ k大小的序列,这不是我的情况。

有人可以建议一种方法吗?理想情况下,一个不涉及强制列表的大小是2的倍数(例如通过在开头附加零)。

3 个答案:

答案 0 :(得分:3)

您的输入数组的大小为x,如果它的格式不是2 t ,则它将为:2 t < x< 2 t + 1 ,因此您可以在输入中添加2 t + 1 - x元素最大值(使其最多两次)然后应用一个公共网络进行排序。最后从结果中删除最后2个 t + 1 - x元素。

答案 1 :(得分:1)

我认为你有两个选择,但我可能错了:

  1. 填写-99999或99999,并在最终结果中忽略99999的尾部。

  2. 填充空值,并在每次比较中允许null在try catch异常语句中丢失。根据您的语言,您可能仍需要从数据结构中删除空值尾部。

  3. 编辑:

    有一种方法可以在不使用填充值的情况下完成,但需要多次合并。例如。合并两个列表的一个子集,然后取一些这些数字并将它们与你第一次遗漏的数字混合,然后再合并两个列表,然后合并上半部分和下半部分..类型的东西..有点凌乱。

答案 2 :(得分:1)

将网络用于大于输入大小的2的最小幂,并删除所有涉及不存在元素的比较器。