将列表分成2个相等的部分

时间:2015-08-02 07:12:59

标签: algorithm list sorting

我有一个包含随机数的列表,使得Number> = 0.现在我必须将列表分成2个相等的部分(假设列表包含偶数个元素),这样第一个列表中包含的所有数字都少了比第二个清单中的数字。这可以通过O(nlogn)中的任何排序机制轻松完成。但我不需要在任何两个相等长度的列表中对数据进行排序。唯一的条件是(第一个列表中的所有元素< =第二个列表中的所有元素。) 那么有没有办法或黑客可以减少复杂性,因为我们不需要在这里排序数据?

1 个答案:

答案 0 :(得分:4)

如果问题实际上是可解决的(数据是正确的),您可以使用selection algorithm找到中位数。当你拥有它时,你只需要创建2个大小相等的数组,并按元素迭代原始列表元素,将每个元素放入任何一个新列表中,具体取决于它是大于还是小于中位数。应该以线性时间运行。

@Edit:正如gen-y-s指出的那样,如果您自己编写选择算法或使用适当的库,它可能已经将输入列表分开,因此不需要第二遍。