Я думаю, что это может быть проблемой приближения. Возьми вторую цитату:
Для массивов, отсортированных с использованием алгоритмов Heapsort и Quicksort, в худшем случае этот метод является операцией O (n log n), где n - длина.
Я видел тонны учебников / статей, описывающих быструю сортировку как O (n log n), в то время как на самом деле вы можете дважды проверить здесь и убедиться, что его наихудшая стоимость в действительности равна O (n²). Это обычно происходит потому, что на практике быстрая сортировка почти всегда быстрее, чем другие алгоритмы сортировки, которые на бумаге имеют меньшую стоимость в худшем случае. Например, вы увидите, что для сортировки блоков в худшем случае O (n log n), но в большинстве практических приложений быстрая сортировка будет быстрее.
Что касается вашей первой цитаты: я бы сказал, что это потому, что в документах упоминается наихудший случай среди возможных случаев. В частности:
- Если размер раздела меньше 16, он идет с сортировкой вставки, которая равна O (n²) (хотя это можно увидеть как O (1) здесь, поскольку она ограничена 16).
- Если раздел […] идет с heapsort, то есть O (n log n).
- В противном случае он идет с быстрой сортировкой, которая фактически равна O (n²).
Так что я бы сказал, что именно поэтому List<T>.Sort
метод описывается как O (n log n) в среднем и O (n²) в худшем случае здесь.