【发布时间】:2014-12-16 03:17:16
【问题描述】:
我正在尝试将列表列表合并到一个主排序列表中。 (它是 C# 中的字符串列表列表,但类型在这里并不真正相关)
这里有类似的问题 How to merge a list of lists with same type of items to a single list of items? 但我的要求不同。
我所做的每一个比较都将基于用户输入,所以我不能像其他问题那样做任何一次性的 LINQ 事情。对于每次比较,我都必须询问用户哪个项目“更好”。
我最初的想法是有效地复制 'mergesort' 的 'merge' 部分,并对每次合并中从第二个列表中弹出的每个新术语重复使用二进制搜索。
但是,我仍然不知道合并列表的最有效顺序是什么。我应该将最小与最小合并,并以这种方式逐步增加大小吗?还是有一个指定的大列表将小列表合并到一次会更好? 我不确定如何去证明这两种方式。
如何在执行最少数量的面向用户的比较的同时合并这些任意大小的列表?
【问题讨论】:
-
有趣的问题,但可能与 CodeReview 或 Programmers 更相关?
-
请详细说明,以明确您要做什么。原始列表是否已经排序? “二分查找”是什么意思?您是说您要使用插入排序,并使用二分查找来查找插入点?但是为什么不对原始列表进行排序,然后进行适当的合并排序?最后请注意如果你使用用户作为实际的比较器,你需要弄清楚你将如何检测和处理不一致的用户输入。期望用户将满足任何重要大小的所有排序比较的传递要求是非常乐观的数据。
标签: c# merge comparison