Какой алгоритм сортировки используется LINQ «OrderBy»?

Очевидно, что «OrderBy» LINQ первоначально был определен как неустойчивый, но ко времени Orca он был определен как стабильный. Не все документы обновлены соответственно – рассмотрите эти ссылки:

  • Джон Скит на стабильности OrderBy
  • Трой Магэннис на стабильности OrderBy

Но если OrderBy от LINQ теперь «стабилен», то это означает, что он не использует quicksort (который по своей сути неустойчив), хотя некоторые документы (например, книга Троя) говорят, что это так. Поэтому мой вопрос: если не quicksort, то какой именно алгоритм использует LINQ orderBy?

Для LINQ to Objects это стабильная quicksort, которая используется. Для любого другого типа LINQ он остается для основной реализации.

Загрузите отражатель, откройте System.Linq.EnumerableSorter показывает, что Linq2Objects использует быструю сортировку

Используется Quicksort, но причина, по которой она стабильна, заключается в том, что индексы каждой пары элементов сравниваются, если все ключи совпадают.

Другими словами, вы можете сделать любую быструю сортировку устойчивой, включив в функцию компаратора сравнение исходных индексов двух элементов в качестве резервной копии.

Источник: http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,1395017e067e5a34

Я понимаю, что OrderBy переводится в SQL, который выполняет сортировку в базе данных. По крайней мере, в случае LINQ to SQL

  • Найти 2 числа в несортированном массиве, равном заданной сумме
  • Найдите отсутствующие и повторяющиеся элементы в массиве в линейном времени и постоянном пространстве
  • Получение ближайшего соответствия строк
  • Как работают тригонометрические функции?
  • Найти k-й наименьший элемент в двоичном дереве поиска Оптимальным способом
  • Простые числа Eratoshenes быстрее последовательны, чем одновременно?
  • Стек с find-min / find-max более эффективен, чем O (n)?
  • Определить цвет шрифта на основе цвета фона
  • Учитывая массив чисел, возвращаем массив продуктов всех других чисел (без деления)
  • Рекурсия или итерация?
  • Что такое хорошая функция hashа?
  • Давайте будем гением компьютера.