【发布时间】:2012-05-04 13:46:08
【问题描述】:
我有几个 long 类型(升序)数字的排序序列,并希望生成一个包含所有元素的主序列以相同的顺序。我寻找最有效的排序算法来解决这个问题。我以 C#、.Net 4.0 为目标,因此也欢迎针对并行性的想法。
这是一个例子:
s1 = 1,2,3,5,7,13
s2 = 2,3,6
s3 = 4,5,6,7,8
结果序列 = 1,2,2,3,3,4,5,5,6,6,7,7,8,13
编辑:当有两个(或更多)相同的值时,这两个(或更多)的顺序无关紧要。
【问题讨论】:
-
节省时间?节省空间?其他一些效率参数?
-
节省时间还是节省空间?
-
您可以使用简单的 for 循环以 O(n) 复杂度合并每个两个子节点。
-
大声笑,就像早期评论者暗示的那样,这似乎不是一个微不足道的问题,因为在我发布后 10 分钟内出现了 4 个完全相反的答案。只是想指出我最初的问题,询问针对我的特定问题的最有效算法的想法,这意味着我绝对不会寻找 C# 内置函数,因为我不知道优化子-序列已经排序。
-
@Freddy 只是觉得值得一提,有一些通用排序算法确实考虑到了这一点,例如 Java 和 Python 默认排序算法(但不是 .Nets)。如果您有兴趣,可以在 wikipedia 上查找 TimSort,但这可能对您来说太过分了,因为您已经确定了排序的子集。
标签: c# algorithm sorting quicksort mergesort