Insertion sort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 1:
{{Algoritmo
|class=[[Algoritmo di ordinamento]]
|image=[[Image:Insertion sort animation.gif|noneright|Esempio di ordinamento di una lista di numeri casuali.]]
|caption=Esempio di ordinamento di una lista di numeri casuali.
|data=[[Array]]
Riga 10:
|optimal=Sì (nel caso di inserimento di alcuni valori in una lista quasi ordinata)
}}
 
[[File:Insertion-sort-example-300px.gif|300px|thumb|right|Esempio grafico dell'insertion sort.]]
 
L''''Insertion sort''', in italiano '''ordinamento a inserimento''', è un [[algoritmo]] relativamente semplice per [[Algoritmo di ordinamento|ordinare]] un [[array]]. Non è molto diverso dal modo in cui un essere umano, spesso, ordina un mazzo di carte. Esso è un [[Algoritmo in loco|algoritmo ''in place'']], cioè ordina l'array senza doverne creare una copia, risparmiando memoria. Pur essendo molto meno efficiente di algoritmi più avanzati, può avere alcuni vantaggi: ad esempio, è semplice da implementare ed è efficiente per insiemi di partenza che sono quasi ordinati.
 
== Descrizione dell'algoritmo ==
 
L'algoritmo solitamente ordina la sequenza sul posto. Si assume che la sequenza da ordinare sia partizionata in una sottosequenza già ordinata, all'inizio composta da un solo elemento, e una ancora da ordinare. Alla <math>k</math>-esima iterazione, la sequenza già ordinata contiene <math>k</math> elementi. In ogni iterazione, viene rimosso un elemento dalla sottosequenza non ordinata (scelto, in generale, arbitrariamente) e ''inserito'' (da cui il nome dell'algoritmo) nella posizione corretta della sottosequenza ordinata, estendendola così di un elemento.
 
[[File:AnimazioneInsertionSort.gif|left|thumb|upright=2.2|Simulazione dell'insertion sort su di un array]]
 
Per fare questo, un'implementazione tipica dell'algoritmo utilizza due indici: uno punta all'elemento da ordinare e l'altro all'elemento immediatamente precedente. Se l'elemento puntato dal secondo indice è maggiore di quello a cui punta il primo indice, i due elementi vengono scambiati di posto; altrimenti il primo indice avanza. Il procedimento è ripetuto finché si trova nel punto in cui il valore del primo indice deve essere inserito.
Line 61 ⟶ 64:
<!-- NON INSERITE IMPLEMENTAZIONI QUI, METTETELE SU WIKIBOOKS, TROVATE IL LINK IN "ALTRI PROGETTI" -->
=== Esempio di funzionamento ===
 
[[File:AnimazioneInsertionSort.gif|left|thumb|upright=2.2|Simulazione dell'insertion sort su di un array]]
 
 
 
 
 
 
 
 
 
 
 
 
Di seguito sono mostrati i passi compiuti dall'algoritmo per ordinare la sequenza [3, 7, 4, 9, 5, 2, 6, 1]. In ogni passo, l'elemento sottolineato è quello considerato, mentre quello in grassetto è l'elemento spostato nel passo precedente.