对由排序数组组成的合并数组进行排序

时间:2016-11-16 13:22:27

标签: c++ arrays vector

我有两个排序的数组,例如(3,4,5)和(1,3,7,8)我得到了组合排序数组(3,4,5,1,3,7,8)。

现在我想对已经组合的数组进行排序,而不是拆分它,而是通过覆盖它,利用它包含2个已经排序的数组这一事实。有没有办法有效地做到这一点?我知道有很多线程关于如何做到这一点,通过遍历排序的数组然后相应地将值放入新数组中,但我还没有在任何地方看到过这种类型的问题。我想在c中这样做,但任何帮助/伪代码将非常友好地赞赏。谢谢!

编辑:进行排序的函数只会给出组合数组和(可能)其他两个数组的长度(如果需要)。

1 个答案:

答案 0 :(得分:1)

如果您已经拥有原始排序数组,则组合数组(注意它已排序)并不是真正有用,除非您的目标存储已经分配。

这是一个众所周知且非常简单的合并两个排序范围的算法,但您可以使用std::merge而不是自己编码。

请注意,仅适用于非重叠输入&输出范围:对于修正后的问题,使用std::inplace_merge,将中间迭代器设置为第二个序列中的第一个元素:

void sort_combined(int *array, size_t total, size_t first) {
    std::inplace_merge(array, array + first, array + total);
}

// and use it like

int combined[] = {3, 4, 5, 1, 3, 7, 8};
const size_t first = 3;
const size_t second = 4;
const size_t total = 7; // == sizeof(combined)/sizeof(*combined)

sort_combined(combined, total, first);