我有一个从 csv 文件生成的客户对象数组:
Date, Name, Sales
03/01, Alpha, 110
03/23
, Alpha, 25
01/02, Beta, 135
...
.csv。可能有多达 500,000 条记录和 100,000 个唯一客户!
- 将您的源数据拆分为每个客户的集合。
对于每个客户:
--按销量排序
--如果记录数为奇数,则返回中间索引处的销售额
--如果记录数是偶数,则返回中间任一侧记录的平均值
- 将返回的记录拖放到结果数组中。
在这种情况下,我会使用:
Dictionary<string, List<int>> dict;
键是客户名称(假设它们是唯一的,否则分配某种唯一 ID?)值是每个客户的销售列表。填充此数组后,您可以进行排序并获取中间元素(如上所述)或将元素的数量相加并除以获取中值。(这是错误的)
排序(使用比较方法)需要 O(nlog n) 时间,其中 n 是要排序的列表的长度。
有一些选择算法可以返回 O(n) 中的第 k 个最小值,请查看下面的维基百科链接