Абсолютно нет!
Во-первых, если я могу отсортировать входящие данные, я могу просто принять все свои данные в O(N)
, а затем передать их себе и отсортировать, используя более быстрый метод. То есть Вы можете выполнить преобразование всех данных в поток, что означает, что оно не может быть быстрее.
Во-вторых, вы описываете сортировку вставкой, которая фактически выполняется за O(N^2)
время (т. Е. Ваше описание O(NK)
было правильным, но K
не является константой, а скорее функцией N
), так как может потребоваться O(N)
время, чтобы найти соответствующий индекс. Вы можете улучшить его, чтобы он был бинарной сортировкой вставок, но он работал бы в O(NlogN)
(при условии, что вы используете связанный список, массив по-прежнему занимал бы O(N^2)
даже с бинарной оптимизацией), так что вы на самом деле этого не сделали сохранил что угодно.
Вероятно, также стоит упомянуть общий принцип; что, пока вы находитесь в модели сравнения (т.е. у вас нет нетривиальной и полезной информации о данных, которые вы сортируете, что является общим случаем), любой алгоритм сортировки будет в лучшем случае O(NlogN)
, То есть наихудшее время выполнения алгоритма сортировки в этой модели - omega(NlogN)
. Это не гипотеза, а теорема. Поэтому невозможно найти что-либо быстрее (при тех же предположениях).