Статья подготовлена для студентов курса «Алгоритмы для разработчиков» в образовательном проекте OTUS. Когда люди изучают алгоритмы сортировок, у них часто возникает вопрос: а существует ли идеальный алгоритм, который может сортировать всё за линейное время или даже быстрее — за константное? Ответ: не существует и не может существовать. Почему? Предположим, у нас есть n-элементов (вектор), которые нужно отсортировать: а1, а2, …, аn. Любой алгоритм сортировки из любого входного вектора делает отсортированный выходной вектор. Сортировка в данном случае делается путём попарных сравнений элементов друг с другом. Если мы представим процесс сортировки графически, получится так называемое “дерево решений”. В каждом узле такого дерева будет сравнение между соответствующими элементами. Переход по левому потомку будет соответствовать ситуации, когда аi < аj, переход по правому — когда аi >= аj. Когда дошли до конца дерева, то есть до листовой вершины, — алгоритм окончен, порядок определён.