За запросы ОП, переместив мой комментарий к ответу. В случае поиска предположение о том, что предварительно отсортированы, ничего не дает (в отличие от задачи поиска). Наиболее эффективный способ найти правильное место для элемента в отсортированном списке - это двоичный поиск, который является O (log n), вы делаете это для n элементов. Вы все еще получаете O (nlgn). У нас есть очень веские доказательства того, что мы НЕ МОЖЕМ делать лучше, чем O (nlgn), для определенной сортировки на основе сравнения. Обратите внимание, что есть алгоритмы, которые, как мы знаем, работают в O (n) на среднем с наихудшим случаем, все еще равным O (nlgn), например, Smooth Sort. Однако есть разница между предварительно отсортированными и поступающими в случайном порядке элементами и вставкой отсортированного подсписка
. Вы можете прочитать об этом чуть подробнее:
Generi c и практичный алгоритм сортировки быстрее, чем O (n log n)?
https://cs.stackexchange.com/questions/80458/can-we-create-faster-sort-algorithm-than-on-log-n
Конечно, вы можете сделать случайный алгоритм, где вы случайным образом сортируете & надеюсь на лучшее. У нас действительно есть методы, которые мы можем использовать для манипулирования вероятностями, так что вероятность получения нужного нам элемента очень близка к 1, а вероятность выбора других элементов очень близка к 0. Вот как мы получаем O ( √N) поиск в списке несортированный в квантовом поиске (есть недавние свидетельства того, что это может быть достигнуто на обычных компьютерах, но еще не было успешно реализовано)
если мы однажды найти более эффективный алгоритм сортировки, это будет тот, который волшебным образом делает это без сравнения элементов. Этот инвариант настолько силен, что даже с квантовой сортировкой мы не знаем, как сделать лучше, чем O (nlgn) на данный момент. Есть исключения из этого в ограниченной в пространстве сортировке