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的情况下