Il mergesort è un <a href="https://it.wikiwhat.page/kavramlar/algoritmo%20di%20ordinamento">algoritmo di ordinamento</a> di tipo divide et impera che funziona suddividendo ripetutamente una lista in sottoliste più piccole, ordinando ciascuna sottolista e quindi unendo le sottoliste ordinate per produrre una nuova lista ordinata.
Come Funziona:
Caratteristiche Importanti:
Complessità Temporale:
Complessità Spaziale: O(n) Il mergesort richiede spazio aggiuntivo per memorizzare le sottoliste durante il processo di unione. Questo lo rende non un algoritmo in-place.
Stabile: Sì Il mergesort è un <a href="https://it.wikiwhat.page/kavramlar/ordinamento%20stabile">ordinamento stabile</a>, il che significa che mantiene l'ordine relativo degli elementi con chiavi uguali.
Ricorsivo: Tipicamente implementato usando la ricorsione, sebbene sia possibile un'implementazione iterativa.
Adatto per:
Vantaggi:
Svantaggi:
Esempio (Pseudocodice):
function mergesort(lista)
if lunghezza(lista) <= 1
return lista // Già ordinata
metà = lunghezza(lista) / 2
sinistra = mergesort(lista[0..metà-1])
destra = mergesort(lista[metà..lunghezza(lista)-1])
return merge(sinistra, destra)
function merge(sinistra, destra)
risultato = lista vuota
i = 0 // Indice per sinistra
j = 0 // Indice per destra
while i < lunghezza(sinistra) e j < lunghezza(destra)
se sinistra[i] <= destra[j]
aggiungi sinistra[i] a risultato
i = i + 1
altrimenti
aggiungi destra[j] a risultato
j = j + 1
// Aggiungi gli elementi rimanenti, se presenti
while i < lunghezza(sinistra)
aggiungi sinistra[i] a risultato
i = i + 1
while j < lunghezza(destra)
aggiungi destra[j] a risultato
j = j + 1
return risultato