![]() |
1
7
enumerable.orderby()将IEnumerable<gt;拖到数组中,并使用快速排序。o(n)储存要求。它是由system.core.dll中的一个内部类完成的,
列出<>。排序和数组。排序使用就地快速排序。 SortedList<>对于插入具有O(n)复杂性,控制了查找插入点的O(log(n))复杂性。因此,将n个未排序的项目放入其中将花费o(n^2)。SortedDictionary<gt;使用红黑树,使insert o(log(n))的复杂性。因此,O(nlog(n))填充它,与摊余快速排序相同。 |
![]() |
2
4
通过Reflector的快速Gander告诉我列表排序方法使用了QuickSort http://en.wikipedia.org/wiki/Quicksort 通过system.collections.generic.genericarraysorthelper SortedList使用array.binarysearch找出在每个添加项上插入内容的位置。 枚举器没有排序逻辑 对于大多数情况,快速排序是一个很好的排序选择,但是如果您对输入数据很不走运,它可以接近o(n^2)。 如果您怀疑输入数据是 巨大的 对于快速排序来说,一堆不吉利(已经排序)的数据。一个技巧是先将数据随机化(总是很便宜),然后对随机数据进行排序。QuickSort算法可以实现一些技巧来缓解对已经排序(或接近排序)的输入数据进行排序的问题,我不知道BCL实现是否执行了这些操作。 |
![]() |
3
4
是的,你的假设听起来不错。我做了一个小测试来证实这一点。 在5000000个整数上,
|
![]() |
4
4
找出每种方法性能的一种方法是测量它:
结果:
这表明,即使对于非常大的列表,orderby的性能也是合理的,但不如在列表上使用内置排序方法快。这可能是因为orderby的代码稍微灵活一些——它需要一个键选择器,必须对每个元素进行评估。 |
![]() |
Cute dog · 如何将文本与重新排序的图像相匹配? 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
![]() |
Rohan Mittal · 按dict值对dict排序 2 年前 |
![]() |
Pikachu620 · 可以对事件列表进行排序吗? 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |
![]() |
tryingmybest09 · 设置出生日期排序不正确 2 年前 |