В общем случае это невозможно при использовании алгоритма сортировки на основе сравнения. Скорее всего, вы что-то упускаете из вопроса.
Представьте себе частично отсортированный массив [1, 2, 3, 4564, 8481, 448788, 145, 86411, 23477]
. Он содержит 9 элементов, первые 3 из которых отсортированы (обратите внимание, что floor(N/sqrt(N)) = floor(sqrt(N))
при условии, что вы имели в виду N/sqrt(N)
и floor(sqrt(9)) = 3
). Проблема в том, что все несортированные элементы находятся в диапазоне, который не содержит отсортированные элементы. Это делает отсортированную часть массива бесполезной для любого алгоритма сортировки, поскольку они все равно останутся там (или будут перемещены до самого конца в случае, когда они больше, чем несортированные элементы).
При таком типе ввода вам все равно нужно независимо отсортировать N - floor(sqrt(N))
элементов. И, насколько я знаю, N - floor(sqrt(N)) ~ N
(~
в основном означает «та же сложность, что и»). Таким образом, у вас остается массив из приблизительно N
элементов для сортировки, что занимает O(N log N)
время в общем случае.
Теперь я указал «использование алгоритма сортировки на основе сравнения», потому что сортировка действительных чисел ( в некотором диапазоне , как и обычные числа с плавающей запятой, хранящиеся в компьютерах) может выполняться в амортизированной форме O(N)
время использования сортировки по хешу (аналог сортировки по счету) или, возможно, даже модифицированной сортировки по основанию, если все сделано правильно. Но тот факт, что часть массива уже отсортирована, не помогает.