insertion sort c with examples
Uno sguardo approfondito all'ordinamento di inserzione con esempi classici.
L'ordinamento per inserzione è una tecnica di ordinamento che può essere visualizzata in un modo in cui giochiamo le carte a portata di mano. Il modo in cui inseriamo una carta in un mazzo o la rimuoviamo, gli ordinamenti per inserimento funzionano in modo simile.
La tecnica dell'algoritmo di ordinamento per inserimento è più efficiente delle tecniche Bubble sort e Selection sort, ma è meno efficiente di altre tecniche come Quicksort e Merge sort.
=> Dai un'occhiata ai migliori tutorial di formazione C ++ qui.
Cosa imparerai:
- Panoramica
- Algoritmo generale
- Pseudocodice
- Illustrazione
- Esempio C ++
- Esempio Java
- Analisi della complessità dell'algoritmo di ordinamento di inserzione
- Conclusione
- Lettura consigliata
Panoramica
Nella tecnica di ordinamento per inserzione, partiamo dal secondo elemento e lo confrontiamo con il primo elemento e lo mettiamo in una posizione appropriata. Quindi eseguiamo questo processo per gli elementi successivi.
Confrontiamo ogni elemento con tutti i suoi elementi precedenti e mettiamo o inseriamo l'elemento nella sua posizione corretta. La tecnica di ordinamento per inserzione è più fattibile per array con un numero inferiore di elementi. È anche utile per ordinare gli elenchi collegati.
informatica intervista domande e risposte pdf
Le liste collegate hanno un puntatore all'elemento successivo (nel caso di una lista collegata singolarmente) e anche un puntatore all'elemento precedente (nel caso di una lista doppiamente collegata). Quindi diventa più facile implementare l'ordinamento per inserzione per un elenco collegato.
Esploriamo tutto sull'ordinamento per inserzione in questo tutorial.
Algoritmo generale
Passo 1 : Ripetere i passaggi da 2 a 5 per K = da 1 a N-1
Passo 2 : imposta temp = A (K)
Passaggio 3 : impostare J = K - 1
Passaggio 4 : Ripetere durante la temp<=A(J)
imposta A (J + 1) = A (J)
impostare J = J - 1
(fine del ciclo interno)
Passaggio 5 : impostare A (J + 1) = temp
(fine del ciclo)
Passaggio 6 : Uscita
Pertanto, nella tecnica di ordinamento per inserzione, partiamo dal secondo elemento poiché assumiamo che il primo elemento sia sempre ordinato. Quindi dal secondo elemento all'ultimo elemento, confrontiamo ogni elemento con tutti i suoi elementi precedenti e mettiamo quell'elemento nella posizione corretta.
Pseudocodice
Di seguito è riportato lo pseudo codice per l'ordinamento per inserzione.
procedure insertionSort(array,N ) array – array to be sorted N- number of elements begin int freePosition int insert_val for i = 1 to N -1 do: insert_val = array(i) freePosition = i //locate free position to insert the element whilefreePosition> 0 and array(freePosition -1) >insert_val do: array (freePosition) = array (freePosition -1) freePosition = freePosition -1 end while //insert the number at free position array (freePosition) = insert_val end for end procedure
Dato sopra è lo pseudo codice per l'ordinamento di inserzione, poi illustreremo questa tecnica nel seguente esempio.
Illustrazione
La matrice da ordinare è la seguente:
Ora per ogni passaggio, confrontiamo l'elemento corrente con tutti i suoi elementi precedenti. Quindi, nel primo passaggio, iniziamo con il secondo elemento.
Quindi abbiamo bisogno di N numero di passaggi per ordinare completamente un array contenente N numero di elementi.
L'illustrazione sopra può essere riassunta in forma tabulare:
Passaggio | Elenco non ordinato | confronto | Elenco ordinato |
---|---|---|---|
1 | {12,3,5,10,8,1} | {12.3} | {3,12,5,10,8,1} |
Due | {3,12,5,10,8,1} | {3,12,5} | {3,5,12,10,8,1} |
3 | {3,5,12,10,8,1} | {3,5,12,10} | {3,5,10,12,8,1} |
4 | {3,5,10,12,8,1} | {3,5,10,12,8} | {3,5,8,10,12,1} |
5 | {3,5,8,10,12,1} | {3,5,8,10,12,1} | {1,3,5,8,10,12} |
6 | {} | {} | {1,3,5,8,10,12} |
Come mostrato nell'illustrazione sopra, iniziamo con il 2ndelemento poiché assumiamo che il primo elemento sia sempre ordinato. Quindi iniziamo confrontando il secondo elemento con il primo e scambiamo la posizione se il secondo elemento è minore del primo.
Questo processo di confronto e scambio posiziona due elementi nelle loro posizioni corrette. Successivamente, confrontiamo il terzo elemento con i suoi elementi precedenti (primo e secondo) ed eseguiamo la stessa procedura per posizionare il terzo elemento nella posizione corretta.
In questo modo, per ogni passata, mettiamo un elemento al suo posto. Per il primo passaggio, posizioniamo il secondo elemento al suo posto. Quindi, in generale, per posizionare N elementi al loro posto, abbiamo bisogno di N-1 passaggi.
Successivamente, dimostreremo l'implementazione della tecnica di ordinamento per inserimento in linguaggio C ++.
Esempio C ++
#include using namespace std; int main () { int myarray(10) = { 12,4,3,1,15,45,33,21,10,2}; cout<<'
Input list is
'; for(int i=0;i<10;i++) { cout < Produzione:
L'elenco di input è
convertitore online gratuito da youtube a mp4
12 4 3 1 15 45 33 21 10 2
L'elenco ordinato è
1 2 3 4 10 12 15 21 33 45
Successivamente, vedremo l'implementazione Java della tecnica di ordinamento per inserimento.
Esempio Java
public class Main { public static void main(String() args) { int() myarray = {12,4,3,1,15,45,33,21,10,2}; System.out.println('Input list of elements ...'); for(int i=0;i<10;i++) { System.out.print(myarray(i) + ' '); } for(int k=1; k=0 && temp <= myarray(j)) { myarray(j+1) = myarray(j); j = j-1; } myarray(j+1) = temp; } System.out.println('
sorted list of elements ...'); for(int i=0;i<10;i++) { System.out.print(myarray(i) + ' '); } } }
Produzione:
Elenco di elementi di input ...
12 4 3 1 15 45 33 21 10 2
elenco ordinato di elementi ...
1 2 3 4 10 12 15 21 33 45
In entrambe le implementazioni, possiamo vedere che iniziamo l'ordinamento dal 2ndelemento dell'array (variabile di ciclo j = 1) e confronta ripetutamente l'elemento corrente con tutti i suoi elementi precedenti, quindi ordina l'elemento per metterlo nella sua posizione corretta se l'elemento corrente non è in ordine con tutti i suoi elementi precedenti.
L'ordinamento per inserzione funziona meglio e può essere completato in meno passaggi se l'array è parzialmente ordinato. Ma man mano che l'elenco si ingrandisce, le sue prestazioni diminuiscono. Un altro vantaggio dell'ordinamento di inserimento è che è un ordinamento stabile, il che significa che mantiene l'ordine degli elementi uguali nell'elenco.
Analisi della complessità dell'algoritmo di ordinamento di inserzione
Dallo pseudo codice e dall'illustrazione sopra, l'ordinamento per inserzione è l'algoritmo efficiente rispetto all'ordinamento a bolle o all'ordinamento per selezione. Invece di utilizzare il ciclo for e le condizioni presenti, utilizza un ciclo while che non esegue ulteriori passaggi aggiuntivi quando l'array viene ordinato.
Tuttavia, anche se passiamo l'array ordinato alla tecnica di ordinamento Insertion, eseguirà comunque il ciclo for esterno richiedendo quindi n numero di passaggi per ordinare un array già ordinato. Questo rende la migliore complessità temporale dell'ordinamento per inserzione una funzione lineare di N dove N è il numero di elementi nella matrice.
Di seguito sono riportate le varie complessità per la tecnica di ordinamento per inserimento:
Complessità temporale nel caso peggiore O (n 2) Migliore complessità temporale del caso Su) Complessità temporale media O (n 2) Complessità spaziale O (1)
Nonostante queste complessità, possiamo ancora concludere che l'ordinamento di inserimento è l'algoritmo più efficiente rispetto alle altre tecniche di ordinamento come Bubble sort e Selection sort.
migliori VPN di Reddit
Conclusione
L'ordinamento per inserzione è la più efficiente di tutte e tre le tecniche discusse finora. Qui, assumiamo che il primo elemento sia ordinato e quindi confrontiamo ripetutamente ogni elemento con tutti i suoi elementi precedenti e quindi posizioniamo l'elemento corrente nella sua posizione corretta nell'array.
In questo tutorial, discutendo l'ordinamento di inserzione, abbiamo notato che confrontiamo gli elementi utilizzando un incremento di 1 e inoltre sono contigui. Questa funzionalità comporta la necessità di più passaggi per ottenere l'elenco ordinato.
Nel nostro prossimo tutorial, discuteremo di 'Shell sort', che è un miglioramento rispetto all'ordinamento di selezione.
Nell'ordinamento della shell, introduciamo una variabile nota come 'incremento' o 'intervallo' utilizzando la quale suddividiamo l'elenco in sottoliste contenenti elementi non contigui che 'separano'. L'ordinamento della shell richiede meno passaggi rispetto all'ordinamento per inserzione ed è anche più veloce.
Nelle nostre esercitazioni future, apprenderemo due tecniche di ordinamento, 'Quicksort' e 'Mergesort' che utilizzano la strategia 'Dividi e conquista' per ordinare gli elenchi di dati.
=> Guarda qui la guida di formazione per principianti C ++.
Lettura consigliata
- Ordinamento della shell in C ++ con esempi
- Ordinamento di selezione in C ++ con esempi
- Metodo MongoDB Sort () con esempi
- Comando di ordinamento Unix con sintassi, opzioni ed esempi
- Bubble Sort in C ++ con esempi
- Ordinamento heap in C ++ con esempi
- Unisci ordinamento in C ++ con esempi
- Ordinamento rapido in C ++ con esempi