代码之家  ›  专栏  ›  技术社区  ›  Brent Arias

LINQ“OrderBy”使用什么排序算法?

  •  47
  • Brent Arias  · 技术社区  · 15 年前

    显然,林克的“OrderBy”最初被指定为不稳定的,但到了Orca时代,它被指定为稳定的。并非所有文档都已相应更新-请考虑以下链接:

    但是,如果LINQ的OrderBy现在是“稳定的”,那么就意味着它没有使用快速排序(这本身就是不稳定的),即使一些文档(例如Troy的书)说它是。所以我的问题是:如果不是快速排序,那么LINQ的orderBy使用的实际算法是什么?

    4 回复  |  直到 8 年前
        1
  •  63
  •   Jb Evain    15 年前

        2
  •  41
  •   LorenVS    15 年前

    启动reflector,打开到System.Linq.EnumerableSorter显示Linq2Objects使用快速排序

        3
  •  15
  •   Wesner Moise    10 年前

    使用快速排序,但它之所以稳定是因为如果所有键测试相等,则会比较每对元素的索引。

    换句话说,通过在comparator函数中包含两个元素的原始索引的比较作为回退,可以使任何快速排序稳定。

    http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1395017e067e5a34

        4
  •  3
  •   John Weldon user3678248    15 年前

    我的理解是 OrderBy 转换为对数据库执行排序的SQL。至少在LINQ到SQL的情况下是这样