Возможный дубликат:
какой тип сортировки используется в функции sort()?
Выполняет ли std:: sort реализацию Quicksort?
Возможный дубликат:
какой тип сортировки используется в функции sort()?
Выполняет ли std:: sort реализацию Quicksort?
Существует два алгоритма, которые традиционно используются.
std::sort
, скорее всего, будет использовать QuickSort или, по крайней мере, вариант над QuickSort, называемый IntroSort, который "вырождается" на HeapSort, когда рекурсия идет слишком глубоко.
Из стандарта:
Сложность: O (N log (N)) сравнения.
std::stable_sort
, скорее всего, будет использовать MergeSort из-за требования стабильности. Однако обратите внимание, что MergeSort требует дополнительного пространства, чтобы быть эффективным.
Из стандарта:
Сложность: выполняется не более N log 2 (N) сравнений; если доступно достаточно дополнительной памяти, это N log (N).
Мне еще предстоит увидеть std::sort
реализацию TimSort, который является многообещающим и был принят на Python (созданный для него на самом деле), Java и Android (на сегодняшний день).
Это зависит от реализации библиотеки. Реализации слияния наиболее распространены, так как это худший случай O (N * logN), в то время как quicksort может деградировать до O (N ^ 2).
Это подтверждает это.
Кроме того, насколько мне известно, на входе используется какая-то эвристика, чтобы решить, какой алгоритм лучше всего использовать внутри, поэтому различные вызовы std::sort()
могут использовать разные алгоритмы.
Из Википедии -
Конкретный алгоритм сортировки не является обязательным и может варьироваться в разных реализациях. Сортировка Wiki Link
Он использует quicksort или introsort.
Я так думаю. std:: list имеет метод сортировки, или вы можете вызвать сортировку, из которой берется 2 итератора, начинаются и заканчиваются.
из-за высокой худшей сложности quicksort (N ^ 2) и относительно сложно реализовать в списке ссылок. Я думаю, что это не будет сделано с помощью quicksort