Merge sort: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Descrizione dell'algoritmo: Aggiunto spazio mancante Etichette: Modifica da mobile Modifica da web per mobile |
corretto errore nella notazione della complessità temporale dell'algoritmo. Etichette: Modifica da mobile Modifica da web per mobile |
||
| (23 versioni intermedie di 14 utenti non mostrate) | |||
Riga 2:
{{Algoritmo
|classe = [[Algoritmo di ordinamento]]
|immagine = Merge
|didascalia = Esempio di merge sort con una lista di numeri casuali. Innanzitutto, si divide l'elenco nell'unità più piccola (1 elemento), quindi si confronta ogni elemento con l'elenco adiacente per ordinare e unire i due elenchi adiacenti. Infine, tutti gli elementi vengono ordinati e uniti.
|struttura dati = [[Array]]
|tempo = <math>
|tempo migliore = <math>\
|tempo medio = <math>\Theta(n\log n)</math>
|spazio = <math>\Theta(n)</math>
Riga 18:
# Se la sequenza da ordinare ha lunghezza 0 oppure 1, è già ordinata. Altrimenti:
# La sequenza viene divisa (''divide'') in due metà (se la sequenza contiene un numero dispari di elementi, viene divisa in due sottosequenze di cui la prima ha un elemento in più della seconda)
# Ognuna di queste sottosequenze viene ordinata, applicando [[
# Le due sottosequenze ordinate vengono fuse (''combina''). Per fare questo, si estrae ripetutamente il minimo delle due sottosequenze e lo si pone nella sequenza in uscita, che risulterà ordinata
=== Esempio di funzionamento ===
[[File:
Supponendo di dover ordinare la sequenza [10 3 15 2 1 4 9 0], l'algoritmo procede ricorsivamente dividendola in metà successive, fino ad arrivare
[10
A questo punto si fondono (merge) in maniera ordinata gli elementi,
[3 10] [2 15] [1 4] [0 9]
Riga 40:
L'esecuzione ricorsiva all'interno del calcolatore non avviene nell'ordine descritto sopra. Tuttavia, si è formulato l'esempio in questo modo per renderlo più comprensibile.
=== Implementazione ===
[[File:Merge sort algorithm diagram2.JPG|thumb|Raffigurazione grafica delle versioni iterativa (bottom-up) e ricorsiva (top-down) dell'algoritmo]]
Riga 67 ⟶ 68:
b[k] ← a[i]
i ← i + 1
k ← k + 1
'''else'''
b[k] ← a[j]
j ← j + 1
k ← k + 1
'''end while'''
Riga 101 ⟶ 103:
== Bibliografia ==
* {{Cita libro|autore=Thomas H. Cormen|wkautore=Thomas H. Cormen|autore2=Charles Eric Leiserson|autore3=Ronald Linn Rivest|wkautore3=Ronald Rivest|autore4=Clifford Stein|titolo=[[Introduzione agli algoritmi|Introduction to algorithms]]|edizione=3|data=2009|editore=MIT Press|ISBN=978-0-262-53305-8}}
== Altri progetti ==
{{interprogetto|b=Implementazioni di algoritmi/Merge sort|b_oggetto=implementazioni|b_preposizione=
== Collegamenti esterni ==
* {{Collegamenti esterni}}
{{Ordinamento}}
{{Portale|informatica}}
[[Categoria:Algoritmi di ordinamento]]
| |||