Also known as introspective sort
Introsort or introspective sort is a hybrid sorting algorithm that provides both fast average performance and (asymptotically) optimal worst-case performance. It begins with quicksort, it switches to heapsort when the recursion depth exceeds a level based on (the logarithm of) the number of elements being sorted and it switches to insertion sort when the number of elements is below some threshold. This combines the good parts of the three algorithms, with practical performance comparable to quicksort on typical data sets and worst-case O(n log n) runtime due to the heap sort. Since the three a
via Wikipedia infobox
Introsort или интроспективная сортировка — алгоритм сортировки, предложенный Дэвидом Мюссером в 1997 году. Он использует быструю сортировку и переключается на пирамидальную сортировку, когда глубина рекурсии превысит некоторый заранее установленный уровень (например, логарифм от числа сортируемых элементов). Этот подход сочетает в себе достоинства обоих методов с худшим случаем O(n log n) и быстродействием, сравнимым с быстрой сортировкой. Так как оба алгоритма используют сравнения, этот алгоритм также принадлежит классу сортировок на основе сравнений. В быстрой сортировке одна из критичных операций — выбор опоры (элемент, относительно которого разбивается массив). Простейший алгоритм выбора основы — взятие первого или последнего элемента массива за опору чревато плохим поведением на отсортированных или почти отсортированных данных. Никлаус Вирт предложил использовать серединный элемент для предотвращения этого случая, деградирующего до O(n²) при неудачных входных данных. Алгоритм выбора опоры «медиана трёх» выбирает опорой средний из первого, среднего и последнего элементов массива. Однако, несмотря на то, что он работает хорошо на большинстве входных данных, все же возможно найти такие входные данные, которые сильно замедлят этот алгоритм сортировки. Такие данные потенциально могут использоваться злоумышленниками. Например, злоумышленники могут посылать такой массив Веб-серверу, добиваясь отказа в обслуживании. Мюссер выяснил, что на худшем наборе данных для алгоритма быстрой сортировки «медиана из трёх» (рассматривался массив из 100 тысяч элементов) introsort работает примерно в 200 раз быстрее. Он также оценил эффект от кеша в случае сортировки Роберта Седжвика, когда небольшие диапазоны сортируются в конце одиночным проходом сортировки вставками. Он выяснил, что такой подход может удвоить количество промахов кеша, но его производительность при использовании двухсторонней очереди значительно лучше, и его следует оставить для библиотек шаблонов, отчасти потому, что выигрыш в других случаях не велик. В реализации Стандартной библиотеки шаблонов C++ от SGI (stl_algo.h) для неустойчивой сортировки используется подход Мюссера с контролем глубины рекурсии, для переключения на алгоритм пирамидальной сортировки, выбор неподвижного элемента как медианы из трёх и в конце применяется алгоритм сортировки вставками Кнута для последовательностей, содержащих менее чем 16 элементов.
Abstract from DBpedia / Wikipedia · CC BY-SA
via Wikidata sitelinks · CC0
Discovered by embedding cosine similarity (sentence-transformers MiniLM, 384-dim).