Что такое временная сложность .NET List.sort () - PullRequest
12 голосов
/ 08 марта 2012

Какова временная сложность C # List<T>.Sort()

Полагаю, это o (N)

Но после того, как я много искал, я не получил точного результата.

Ответы [ 4 ]

22 голосов
/ 08 марта 2012

http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx

Этот метод использует Array.Sort, который использует алгоритм QuickSort.Эта реализация выполняет нестабильную сортировку;то есть, если два элемента равны, их порядок может не сохраниться.Напротив, стабильная сортировка сохраняет порядок элементов, которые равны.

В среднем этот метод является операцией O (n log n), где n равно Count;в худшем случае это операция O (n ^ 2).

6 голосов
/ 08 марта 2012

С документация :

В среднем этот метод является операцией O (n log n), где n - это Count; в худшем случае это операция O (n ^ 2).

Это потому, что он использует Quicksort. Хотя обычно это O (n log n), , как упоминалось в Википедии , «Быстрая сортировка на практике часто быстрее, чем другие алгоритмы O (n log n)»

4 голосов
/ 27 июня 2016

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

В этом методе используется метод Array.Sort, который применяет интроспективную сортировку следующим образом:

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

Эта реализация выполняет нестабильную сортировку;то есть, если два элемента равны, их порядок может не сохраниться.Напротив, стабильная сортировка сохраняет порядок элементов, которые равны.

В среднем этот метод является операцией O (n log n), где n - это Count;в худшем случае это операция O (n ^ 2).

0 голосов
/ 08 марта 2012

лучше всего это может быть асимптотически O (nlogn)

...