【发布时间】:2020-03-05 18:49:20
【问题描述】:
看看这个例子:https://repl.it/repls/PuzzledAthleticMacroinstruction
它创建一个包含随机值的对象列表,然后对它们进行排序。根据 n*log(n) 的大 O,您会期望排序花费的时间最长。但是,排序比生成列表要快得多。
输出是:
Generate list in 8421 milliseconds
Sort in 46 milliseconds
Before sorting, first element was 8445383 and last element was 11537420
After sorting, first element is 0 and last element is 11999999
这似乎是不可能的。
【问题讨论】:
-
因为它是懒惰的。如果您不需要单个列表,则它根本不会进行任何排序。如果您只对第一个元素感兴趣,则需要 O(n).
-
@WillemVanOnsem 示例中的代码确实访问了第一个和最后一个元素。列表不需要为此排序吗?
-
你真的应该在问题中包含代码,而不仅仅是在链接中
-
添加到 Willem Van Onsem 的富有洞察力的评论中,如果您在调用中添加
.ToList(),它会突然开始花费一些时间。 -
@TomDane:是的,但不是在
.OrderBy(..)本身。只有当您调用.Last()时,它才会真正“排序”传递给它的元素。
标签: c# algorithm performance linq sorting