Кто-нибудь знает, какой алгоритм сортировки используется .net, когда мы реализуем IComparer в нашем классе?
IComparer
QuickSort , похоже, это.
Документация по IComparer говорит
Этот интерфейс используется вместе с методами Array.Sort и Array.BinarySearch .
Документация Array.Sort гласит
Этот метод использует алгоритм быстрой сортировки. Эта реализация выполняет нестабильную сортировку; то есть, если два элемента равны, их порядок может не сохраниться. Напротив, стабильная сортировка сохраняет порядок элементов, которые равны.
Согласно MSDN , .NET использует QuickSort. Кстати, метод абсолютно не зависит от компаратора (если он основан на сравнении). Почему .NET должен использовать другой метод в зависимости от того, предоставляете ли вы собственный компаратор или нет?
В текущей документации говорится, что используется тип Introsort , алгоритм гибридной сортировки:
Работает так:
Если размер раздела меньше 16 элементов, он использует сортировка вставок алгоритм
Если число разделов превышает 2 * LogN, где N - диапазон входного массива использует алгоритм Heapsort .
В противном случае используется алгоритм Quicksort .
источник здесь