日期:2014-05-17  浏览次数:20827 次

LINQ排序是怎么实现的?
不是说是快速排序么?但是我实测它是稳定的,这是怎么回事?

------解决方案--------------------
在linq to object中用的是稳定快速排序法,其他linq有各自不同实现方法。
可以看源码就知道了。
http://dotnetinside.com/framework/v4.0.30319/System.Core/EnumerableSorter%601
------解决方案--------------------
的确是快速排序,但是只要记录下排序前的元素顺序,很容易将非稳定排序改造成稳定排序。

换言之,非稳定排序都是可以转换成稳定排序的,只要增加一个原始位置记录,避免元素相等即可。
------解决方案--------------------
LINQ排序的实现关键还是在于EnumerableSorter<TElement>

具体你可以参考老赵的这篇文章http://www.cnblogs.com/JeffreyZhao/archive/2010/01/27/sort-array-linq-3-linq-sort.html