我现在正致力于合并排序的一个不可思议的版本。我用C ++和C#实现了它。然后分别将它们与stl sort和array.sort()算法进行比较。在C ++中,我得到了相同(有时更好)的结果。但在C#中,我不得不使用不安全的代码来使用指针。在这里,性能与默认排序没有那么相似。所以,我想知道 -
1.在stl和.net基类库中使用了哪些算法?(更好的链接)
2.不安全的代码是否存在性能问题?
3.关于衡量新算法性能的任何建议吗?
答案 0 :(得分:6)
.NET使用Quicksort的变体(Sedgewick的中位数为3 Quicksort)。
除非你是排序方面的专家,否则我会惊讶于你能在多种数据(包括随机,已订购和反向排序的集合)中击败内置排序。诉诸不安全的代码通常是一个坏主意......
答案 1 :(得分:1)
STL排序可能取决于实现,但(as wikipedia says)它通常是introsort,quicksort和heapsort的组合。它必须具有O(n log n)比较的平均复杂度。
答案 2 :(得分:0)
.NET使用QuickSort。您可以使用Reflector查看System.Collections.Generic.ArraySortHelper中的实现
在大多数情况下,即使最坏情况下的执行时间较长,QuickSort也会比MergeSort运行得更快。我认为标准QuickSort也有一些改进,但我不确定是否使用了这些改进。
我似乎也想起了使用QuickSort的STL,但我并不完全确定。