Какой алгоритм сортировки используется в методе .NET Array.Sort ()? - PullRequest
14 голосов
/ 06 декабря 2009

Какой алгоритм сортировки используется методом .NET Array.Sort()?

Ответы [ 5 ]

20 голосов
/ 06 июня 2015

Array.Sort() выбирает один из трех алгоритмов сортировки, в зависимости от размера ввода:

  1. Если размер меньше 16 элементов, он использует алгоритм сортировки вставкой.
  2. Если размер превышает 2 * log^N, где N - диапазон входного массива, он использует алгоритм сортировки кучи.
  3. В противном случае используется алгоритм быстрой сортировки

Источник: Метод Array.Sort (Array) в MSDN .

4 голосов
/ 06 декабря 2009

Используется алгоритм QuickSort .

Источник:

1 голос
/ 09 апреля 2015

На самом деле, это не так просто, как кажется. Похоже, что .NET реализует набор различных алгоритмов сортировки в зависимости от ввода и его размера. Раньше я декомпилировал Array.Sort() из CLR, и кажется, что они используют и Heap, Insertion и Quicksort. enter image description here

1 голос
/ 20 февраля 2012

Быстрая сортировка, как упоминалось. Но это не одинаково хорошо для всех данных!

Используя рефлектор: он выполняет сортировку в собственном dll -> для наиболее распространенного случая одномерных массивов, в порядке возрастания. Однако другие случаи сортируются в управляемом коде - при этом применяется очень мало оптимизаций. Следовательно их скорость обычно намного медленнее.

0 голосов
/ 06 декабря 2009
...