C#的List<T>.Sort()
的时间复杂性是什么?
我猜是O(N)。
但是我搜索了很多,没有得到准确的结果。
C#的List<T>.Sort()
的时间复杂性是什么?
我猜是O(N)。
但是我搜索了很多,没有得到准确的结果。
http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx
该方法使用Array.Sort,采用了快速排序算法。此实现执行不稳定排序;也就是说,如果两个元素相等,则它们的顺序可能无法保留。相比之下,稳定排序可以保留相等元素的顺序。
平均情况下,该方法是一个O(n log n)的操作,其中n是Count;在最坏情况下,它是一个O(n ^ 2)的操作。
最近在MSDN上新增了一些关于4.5框架中List.Sort方法的信息,该方法会根据元素数量和分区情况使用不同的排序策略。
该方法使用Array.Sort方法应用内省排序算法,具体如下:
- 如果分区大小少于16个元素,则使用插入排序算法。
- 如果分区数超过输入数组范围N的2 * LogN,则使用堆排序算法。
- 否则,使用快速排序算法。
此实现执行不稳定排序;也就是说,如果两个元素相等,则它们的顺序可能不被保留。 相反,稳定排序可以保留相等元素的顺序。
平均而言,此方法是O(n log n)操作,其中n是Count; 在最坏的情况下,它是O(n ^ 2)操作。
最优的渐进时间复杂度是O(nlogn)
List.Sort
还是List<T>.Sort
? - John Saunders