Algoritmi di ordinamento -> Merge sort
Il Merge sort è un algoritmo di ordinamento di tipo "divide et impera" ricorsivo inventato nel 1945 da John von Neumann e presenta una complessità di O(n log n). Una procedura di tipo Divide et impera si preoccupa inizialmente di suddividere il problema iniziale in diversi sottoproblemi della stessa natura di dimensione più piccola. Rispetto agli altri algoritmi visti finora, questo rientra a far parte di quelli efficienti (anche se non non dimostreremo il perchè la complessità è O(n log n)).
Concettualmente il merge sort consta di due operazioni:
Nella figura è possibile osservare l'animazione dell'algoritmo
Codice (C++)
Una possibile implementazione del merge sort è quella che segue. Come al solito sono presenti alcuni commenti accanto alle parti più importanti
e un esempio di utilizzo
N.B. : è di facile costruzione la variante in C. L'unica modifica da fare è la sostituzione di new e delete con malloc() e free().
Il Merge sort è un algoritmo di ordinamento di tipo "divide et impera" ricorsivo inventato nel 1945 da John von Neumann e presenta una complessità di O(n log n). Una procedura di tipo Divide et impera si preoccupa inizialmente di suddividere il problema iniziale in diversi sottoproblemi della stessa natura di dimensione più piccola. Rispetto agli altri algoritmi visti finora, questo rientra a far parte di quelli efficienti (anche se non non dimostreremo il perchè la complessità è O(n log n)).
Concettualmente il merge sort consta di due operazioni:
- Suddivisione della lista disordinata in n sottoliste, ciascuna contenente un solo elemento (una lista con un solo elemento è di per sè ordinata)
- Unione (merge) delle sottoliste ordinate in modo da ottenere ancora una lista ordinata; questa operazione viene ripetuta finchè non si ottiene una sola sottolista (che sarà quindi quella di partenza ordinata)
Nella figura è possibile osservare l'animazione dell'algoritmo

Codice (C++)
Una possibile implementazione del merge sort è quella che segue. Come al solito sono presenti alcuni commenti accanto alle parti più importanti
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
N.B. : è di facile costruzione la variante in C. L'unica modifica da fare è la sostituzione di new e delete con malloc() e free().