显然,LINQ的“OrderBy”最初被指定为不稳定,但到Orca时,它被指定为稳定。并非所有文档都已相应更新 - 请考虑以下链接:
但是如果LINQ的OrderBy现在“稳定”,那么这意味着它没有使用快速排序(这本质上是不稳定的),即使某些文档(例如Troy的书)说它是。所以我的问题是:如果不是快速排序,那么LINQ的orderBy使用的实际算法是什么?
答案 0 :(得分:51)
对于LINQ to Objects,它是一个稳定的快速排序。对于任何其他类型的LINQ,它留给底层实现。
答案 1 :(得分:36)
启动反射器,打开System.Linq.EnumerableSorter显示Linq2Objects使用快速排序
答案 2 :(得分:11)
使用Quicksort,但它稳定的原因是因为如果所有键测试相等,则比较每对元素的索引。
换句话说,您可以通过在比较器函数中包含两个元素的原始索引的比较作为回退来使任何快速排序稳定。
来源:http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1395017e067e5a34
答案 3 :(得分:3)
我理解OrderBy
被转换为在数据库上执行排序的SQL。至少在LINQ to SQL的情况下