Нет, это невозможно, хотя моя работа была бы намного проще, если бы это было :).
У вас есть фактор O (log n), которого вы не можете избежать. Вы можете выбрать время или пространство, но единственный способ избежать этого - не сортировать. С пространством O (log n) вы можете создать список продолжений, отслеживающих, где вы спрятали элементы, которые не совсем подходят. С помощью рекурсии это можно сделать так, чтобы оно поместилось в куче O (1), но это только при использовании вместо этого фреймов стека O (log n).
Вот прогресс слияния-сортировки шансов и равенств от 1 до 9. Обратите внимание, как вам требуется учет пространства журнала для отслеживания инверсий порядка, вызванных двойными ограничениями постоянного пространства и линейных свопов.
. -
135792468
. -
135792468
: .-
125793468
: .-
123795468
#.:-
123495768
:.-
123459768
.:-
123456798
.-
123456789
123456789
Есть некоторые деликатные граничные условия, которые немного сложнее, чем двоичный поиск, и даже в этой (возможной) форме, и, следовательно, плохая домашняя задача; но действительно хорошее умственное упражнение.
Обновить По-видимому, я ошибаюсь, и существует алгоритм, который предоставляет время O (n) и пространство O (1). Я скачал документы, чтобы просветить себя, и беру этот ответ как неверный.
person
Recurse
schedule
20.07.2010