Non, ce n'est pas possible, bien que mon travail serait beaucoup plus facile si c'était :).
Vous avez un facteur O (log n) que vous ne pouvez pas éviter. Vous pouvez choisir de le prendre comme temps ou espace, mais la seule façon de l'éviter est de ne pas trier. Avec l'espace O (log n) vous pouvez construire une liste de continuations qui gardent la trace de l'endroit où vous avez caché les éléments qui ne vous convenaient pas. Avec la récursion, ceci peut être fait pour tenir dans le tas O (1), mais c'est seulement en utilisant des cadres de pile O (log n) à la place.
Voici la progression des cotes de fusion et de tri de 1-9.Remarquez comment vous avez besoin de la comptabilité log-espace pour suivre les inversions d'ordre causées par les contraintes jumelles de l'espace constant et des échanges linéaires.
. -
135792468
. -
135792468
: .-
125793468
: .-
123795468
#.:-
123495768
:.-
123459768
.:-
123456798
.-
123456789
123456789
Il y a des conditions aux limites délicates, un peu plus difficile que la recherche binaire pour obtenir le droit, et même dans ce (possible) forme, et donc un problème de mauvais devoirs; mais un très bon exercice mental. Apparemment, je me trompe et il y a un algorithme qui fournit l'espace O (n) et l'espace O (1). J'ai téléchargé les papiers pour m'éclairer et retirer cette réponse comme incorrecte.
La question indique-t-elle spécifiquement fusionner-trier? Je sais qu'il est possible de fusionner le tri sur place, mais pas en temps O (n) (du moins je n'en ai jamais entendu parler.) – jrista
Non, ce n'est pas le cas. Je fais l'analogie avec l'étape de fusion. Cela ressemble beaucoup. – Sid
Si vous avez posté le libellé exact de la question, cela ne semble pas avoir de rapport avec mergesort. Il existe des algorithmes de tri O (1) et O (n) en place pour un tableau pré-trié (c'est-à-dire un tri par insertion). Mergesort n'en fait pas partie, et il est bien connu que ce n'est pas l'un d'entre eux, donc ... – jrista