Migliore risposta
Mergesort, se implementato per creare array nelle chiamate ricorsive, creerà molti di loro, ma non coesisteranno allo stesso tempo. In ogni chiamata ricorsiva crei un array (o 2 a seconda di unimplementazione) per lunione e non occupano più di O (n) spazio, quindi quando lunione è fatto, questi array vengono cancellati e alcuni nuovi verranno creati dopo un momento in qualche altra chiamata ricorsiva. Se hai contato quanto spazio hanno occupato tutti gli array che sono stati creati, “d essere O (n log n), ma non hai bisogno di preoccuparti di queste informazioni – non ti serve più dello spazio O (n), perché quando hai bisogno di creare un array, tutti gli altri non esistono più e non occupano memoria . Nota che puoi semplicemente dichiarare 2 – o 3 – array allinizio, ciascuno della lunghezza di n, e quindi memorizzare la sequenza in uno di essi, mentre usi laltro per lunione, migliorerà le prestazioni e ti mostrerà oltre dubbio non cè bisogno di più di O (n) di memoria.
Risposta
Nellordinamento di tipo merge quando uniamo 2 array ordinati creiamo 2 array temporanei. L [ ] = Arr [left, mid] (array sinistro) per memorizzare temporaneamente il vecchio array da sinistra a metà (metà sinistra ordinata) e R [] = Arr [mid + 1, right] (array destro) per memorizzare temporaneamente il vecchio array da metà + 1 a destra (ordinata metà destra), quindi uniamo i due array temporanei a quello originale. Il fatto che creiamo 2 array temporanei per memorizzare i numeri dellarray originale, poiché larray originale ha n elementi il temporaneo gli array sono rispettivamente di dimensione n e quindi lo spazio extra di ne una complessità spaziale O (n). Lo spazio originale dellarray non viene considerato durante il calcolo della complessità spaziale di un ordinamento algoritmo.