LINQ“OrderBy”使用什么sortingalgorithm?
显然,LINQ的“OrderBy”最初被指定为不稳定的,但到了Orca时,它被指定为稳定的。 并非所有文档都已相应更新 – 请考虑以下链接:
- Jon Skeet对OrderBy的稳定性
- 特洛伊Magennis在OrderBy稳定
但是,如果LINQ的OrderBy现在是“稳定的”,那么即使有些文档(如Troy的书)说的是这样,它意味着它不使用快速sorting(这固有地不稳定)。 所以我的问题是:如果不是快速sorting,那么LINQ的orderBy使用的algorithm是什么?
对于LINQ to Objects,这是一个稳定的quicksort使用。 对于任何其他种类的LINQ,都由底层的实现来决定。
启动reflection器,打开System.Linq.EnumerableSorter显示Linq2Objects使用快速sorting
快速sorting被使用,但它稳定的原因是因为如果所有的键testing相等,每对元素的索引进行比较。
换句话说,通过在比较函数中包含两个元素的原始索引作为回退,可以使任何快速sorting稳定。
资料来源: http : //referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1395017e067e5a34
我的理解是, OrderBy
被转换成SQL,在数据库上执行sorting。 至less在LINQ to SQL的情况下