List <t> .Sort和OrderBy在结果上的最小列表是什么?</t>

时间:2013-11-26 12:09:13

标签: c# .net sorting

我了解List<T>.SortEnumerable.OrderBy中的排序算法之间存在差异。后者是稳定的,意思是元素相等,它保留了原始的顺序。

这一切都很好地重复了这个定义,但是要教这个,我想展示一个简单的示例,其中算法的结果不同

我找到了这个例子“鉴于从最老到最年轻的七个韦斯莱兄弟姐妹,按姓名长度排序。”

var weasleys = new List<string>{"Bill", "Charlie", "Percy", "Fred", "George", "Ron", "Ginny"};

在这种情况下,OrderBy

weasleys.OrderBy(x => x.Length)

给[Ron,Bill,Fred,Percy,Ginny,George,Charlie]。请注意,“比尔”和“弗雷德”的长度相同,但比尔年龄较大,因此比尔是第一位的。

而List.Sort

weasleys.Sort((x, y) => x.Length.CompareTo(y.Length));

给[Ron, Fred ,Bill,Ginny,Percy,George,Charlie]。

我的例子有七个项目。是否有更简单的案例,项目更少? 算法给出不同结果的最小列表是什么?

2 个答案:

答案 0 :(得分:3)

排序算法的这个属性称为stabilityList<T>.Sort 明确地不稳定:

  

此实现执行不稳定的排序;也就是说,如果是两个   元素是相等的,它们的顺序可能不会被保留。相比之下,a   stable sort保留了相等元素的顺序。

http://msdn.microsoft.com/en-us/library/b0zbh7b6(v=vs.110).aspx

OrderBy 明确地稳定的地方:

  

此方法执行稳定排序;也就是说,如果两个键   元素相等,元素的顺序得以保留。在   相反,不稳定的排序不会保留元素的顺序   具有相同的密钥。

http://msdn.microsoft.com/en-us/library/bb534966(v=vs.110).aspx

答案 1 :(得分:0)

我不确定,但也许: 排序只是一种方法。 OrderBy是扩展方法(Linq) http://msdn.microsoft.com/en-us/library/vstudio/bb383982.aspx OrderBy稍后制作,并与IEnumerable一起使用。它是linq的一部分,当你想将orderby与其他linq动作结合使用时,它会为你提供更多功能。