Какой алгоритм сортировки используется методом .NET Array.Sort()
?
Какой алгоритм сортировки используется методом .NET Array.Sort()?
Ответ 1
Он использует алгоритм QuickSort.
Источник:
- Array.Sort Method (MSDN, примечания)
Ответ 2
Array.Sort()
выбирает один из трех алгоритмов сортировки, в зависимости от размера ввода:
- Если размер меньше 16 элементов, он использует алгоритм сортировки вставки.
- Если размер превышает
2 * log^N
, гдеN
- это диапазон входного массива, он использует алгоритм сортировки кучи. - В противном случае он использует алгоритм Quicksort
Источник: Метод Array.Sort(Array) в MSDN.
Ответ 3
Собственно, это не так просто, как кажется. Похоже,.NET реализует множество различных алгоритмов сортировки в зависимости от ввода и его размера. Раньше я декомпилировал Array.Sort()
из CLR, и кажется, что они используют как кучу, вставку, так и Quicksort.
Ответ 4
Быстрая сортировка, как упоминалось. Но это не одинаково хорошо для всех данных!
Используя рефлектор: он сортирует в родной dll → для наиболее распространенного случая 1D массивов в порядке возрастания. Однако другие случаи сортируются в управляемом коде - с очень небольшими оптимизациями. Следовательно, их скорость обычно намного медленнее.
Ответ 5
Еще несколько заметок из MSDN
Этот метод использует интроспективный алгоритм сортировки (introsort) как следующим образом:
Если размер раздела меньше 16 элементов, используется вставка алгоритм сортировки.
Если число разделов превышает 2 * LogN, где N - это диапазон входной массив, он использует алгоритм Heapsort.
Otherwise, it uses a Quicksort algorithm.
Эта реализация выполняет нестабильную сортировку; то есть если два элементы равны, их порядок не может быть сохранен. В отличие от стабильная сортировка сохраняет порядок элементов, которые равны.
Для массивов, отсортированных с использованием Heapsort и Quicksort алгоритмы, в худшем случае, этот метод является O (n log n), где n - длина.
Примечания для абонентов .NET Framework 4 и более ранние версии используются только алгоритм быстрой сортировки. Быстрая сортировка выявляет недопустимые компараторы в некоторые ситуации, в которых операция сортировки Исключение IndexOutOfRangeException и создает исключение ArgumentException исключение для звонящего. Начиная с .NET Framework 4.5, это возможно, что операции сортировки, которые ранее бросили ArgumentException не сгенерирует исключение, потому что вставка Алгоритмы sort и heapsort не обнаруживают недопустимый компаратор. За по большей части это относится к массивам с менее чем 16 элементами.
Ответ 6
Он использует быстрая сортировка для целей сортировки