Есть ли у этих алгоритмов сортировки какое-либо применение в реальных приложениях?
Или это просто базовый пример алгоритма сортировки со сложностью n ^ 2?
Кто-нибудь может привести пример его использования?
Есть ли у этих алгоритмов сортировки какое-либо применение в реальных приложениях?
Или это просто базовый пример алгоритма сортировки со сложностью n ^ 2?
Кто-нибудь может привести пример его использования?
Сортировка вставкой - один из самых быстрых алгоритмов сортировки очень маленьких массивов.
На практике многие реализации быстрой сортировки / слияния останавливаются, когда подмассивы для сортировки ниже определенного порога, и затем для этих небольших массивов используется сортировка вставкой.
Выборочная сортировка на практике используется редко.
Сортировка вставкой на самом деле довольно быстрая для небольших размеров ввода из-за небольших скрытых констант в ее сложности. До некоторого размера сортировка вставкой выполняется быстрее, чем сортировка слиянием.
Таким образом, для многих популярных алгоритмов сортировки, когда размер массива становится очень маленьким, используется сортировка вставкой.
Итог: алгоритм O (N 2) на практике может быть быстрее, чем алгоритм O (N * logN) для входов достаточно малого размера из-за скрытых констант.
Да, сортировка вставками широко используется в промышленных приложениях. В основном это связано с тем, что несколько популярных стандартных библиотек C ++, таких как libstdc ++ и реализация libc ++ sort
процедура как комбинация сортировки вставкой и быстрой сортировки с ограничением глубины.
Идея состоит в том, что сортировка вставкой работает очень быстро с почти отсортированными массивами, в то время как для простой реализации быстрой сортировки сортировка ввода приводит к худшему случаю. Поэтому комбинированный алгоритм сначала применяет алгоритм, подобный быстрой сортировке, для частичной сортировки ввода, а затем завершается вызовом сортировки вставкой.
В libc ++ сортировка вставки также используется для сортировки по умолчанию, если размер ввода достаточно мал (но больше пяти элементов, поскольку размеры ‹= 5 обрабатываются как особые случаи).
HP / Microsoft std :: sort () - это интросорт, быстрая сортировка с параметром глубины, который переключается на heapsort если глубина становится слишком глубокой.
HP / Microsoft std :: stable_sort () - это разновидность timsort. Он использует сортировку вставкой для создания групп из 32 отсортированных элементов, а затем использует сортировку слиянием снизу вверх для объединения групп.
Кстати, сортировка слияния сверху вниз не используется ни в одной известной мне известной библиотеке. Вместо этого общие версии библиотек для внутренней (память) и внешней (диск) сортировки слияния представляют собой разновидности сортировки слиянием снизу вверх (например, timsort). Тем не менее, в классе или в статьях на веб-сайтах вы видите больше примеров сортировки слиянием сверху вниз, чем сортировки слияния снизу вверх.