logo

Algoritmo di ordinamento per inserimento

In questo articolo discuteremo dell'algoritmo di ordinamento per inserimento. Anche la procedura di lavoro dell'ordinamento per inserzione è semplice. Questo articolo sarà molto utile e interessante per gli studenti poiché potrebbero dover affrontare l'ordinamento per inserimento come domanda durante gli esami. Quindi è importante discutere l’argomento.

L'ordinamento per inserimento funziona in modo simile all'ordinamento delle carte da gioco in mano. Si presuppone che la prima carta sia già ordinata nel gioco di carte, quindi selezioniamo una carta non ordinata. Se la carta non ordinata selezionata è maggiore della prima carta, verrà posizionata sul lato destro; altrimenti verrà posizionato sul lato sinistro. Allo stesso modo, tutte le carte non ordinate vengono prese e messe al loro posto esatto.

Lo stesso approccio viene applicato nell'ordinamento per inserzione. L'idea alla base dell'ordinamento per inserimento è che prima prendi un elemento, iteralo attraverso l'array ordinato. Sebbene sia semplice da usare, non è appropriato per insiemi di dati di grandi dimensioni poiché la complessità temporale dell'ordinamento di inserimento nel caso medio e nel caso peggiore è SU2) , dove n è il numero di elementi. L'ordinamento per inserimento è meno efficiente degli altri algoritmi di ordinamento come l'ordinamento heap, l'ordinamento rapido, l'ordinamento mediante unione, ecc.

L'ordinamento per inserzione presenta vari vantaggi come:

  • Implementazione semplice
  • Efficiente per piccoli set di dati
  • Adattivo, cioè appropriato per insiemi di dati che sono già sostanzialmente ordinati.

Vediamo ora l'algoritmo dell'ordinamento per inserzione.

Algoritmo

I semplici passaggi per ottenere l'ordinamento di inserimento sono elencati come segue:

Passo 1 - Se l'elemento è il primo elemento, presupponi che sia già ordinato. Ritorno 1.

Shreya Ghoshal, primo marito

Passo 2 - Scegli l'elemento successivo e memorizzalo separatamente in a chiave.

Passaggio 3: Ora, confronta il chiave con tutti gli elementi nell'array ordinato.

Passaggio 4: Se l'elemento nell'array ordinato è più piccolo dell'elemento corrente, passa all'elemento successivo. Altrimenti, sposta gli elementi più grandi nell'array verso destra.

Passaggio 5: Inserisci il valore.

Passaggio 6: Ripetere finché l'array non viene ordinato.

Funzionamento dell'algoritmo di ordinamento per inserzione

Ora vediamo il funzionamento dell'algoritmo di ordinamento per inserimento.

Per comprendere il funzionamento dell'algoritmo di ordinamento per inserimento, prendiamo un array non ordinato. Sarà più semplice comprendere l'ordinamento per inserzione tramite un esempio.

Lascia che gli elementi dell'array siano -

Algoritmo di ordinamento per inserimento

Inizialmente, i primi due elementi vengono confrontati nell'ordinamento per inserzione.

Algoritmo di ordinamento per inserimento

Qui 31 è maggiore di 12. Ciò significa che entrambi gli elementi sono già in ordine crescente. Quindi, per ora, 12 è memorizzato in un sottoarray ordinato.

Algoritmo di ordinamento per inserimento

Ora passa ai due elementi successivi e confrontali.

Algoritmo di ordinamento per inserimento

Qui 25 è minore di 31. Quindi 31 non è nella posizione corretta. Ora scambia 31 con 25. Oltre allo scambio, l'ordinamento per inserimento controllerà anche tutti gli elementi nell'array ordinato.

Per ora, l'array ordinato ha un solo elemento, ovvero 12. Quindi, 25 è maggiore di 12. Pertanto, l'array ordinato rimane ordinato dopo lo scambio.

Algoritmo di ordinamento per inserimento

Ora, due elementi nell'array ordinato sono 12 e 25. Passa agli elementi successivi che sono 31 e 8.

Algoritmo di ordinamento per inserimento

Sia 31 che 8 non sono ordinati. Quindi scambiateli.

Algoritmo di ordinamento per inserimento

Dopo lo scambio, gli elementi 25 e 8 non sono ordinati.

Algoritmo di ordinamento per inserimento

Quindi scambiateli.

Algoritmo di ordinamento per inserimento

Ora gli elementi 12 e 8 non sono ordinati.

Algoritmo di ordinamento per inserimento

Quindi, scambia anche loro.

Algoritmo di ordinamento per inserimento

Ora, l'array ordinato ha tre elementi che sono 8, 12 e 25. Passa agli elementi successivi che sono 31 e 32.

Algoritmo di ordinamento per inserimento

Quindi sono già ordinati. Ora, l'array ordinato include 8, 12, 25 e 31.

Algoritmo di ordinamento per inserimento

Passa agli elementi successivi che sono 32 e 17.

Algoritmo di ordinamento per inserimento

17 è più piccolo di 32. Quindi scambiali.

Algoritmo di ordinamento per inserimento

Lo scambio rende 31 e 17 non ordinati. Quindi, scambia anche loro.

Algoritmo di ordinamento per inserimento

Ora, lo scambio rende 25 e 17 non ordinati. Quindi, esegui nuovamente lo scambio.

Algoritmo di ordinamento per inserimento

Ora l'array è completamente ordinato.

Complessità dell'ordinamento di inserimento

Vediamo ora la complessità temporale dell'ordinamento per inserimento nel caso migliore, medio e peggiore. Vedremo anche la complessità spaziale dell'ordinamento per inserzione.

1. Complessità temporale

Caso Complessità temporale
Caso migliore SU)
Caso medio SU2)
Caso peggiore SU2)
    Migliore complessità del caso -Si verifica quando non è richiesto alcun ordinamento, ovvero l'array è già ordinato. La complessità temporale dell'ordinamento per inserimento è nel migliore dei casi SU) .Complessità media del caso -Si verifica quando gli elementi dell'array sono in ordine confuso, ovvero non correttamente ascendente e non correttamente discendente. La complessità media del tempo di caso dell'ordinamento di inserimento è SU2) .Complessità del caso peggiore -Si verifica quando gli elementi dell'array devono essere ordinati in ordine inverso. Ciò significa che supponiamo di dover ordinare gli elementi dell'array in ordine crescente, ma i suoi elementi sono in ordine decrescente. La complessità temporale nel caso peggiore dell'ordinamento per inserimento è SU2) .

2. Complessità spaziale

Complessità spaziale O(1)
Stabile
  • La complessità spaziale dell'ordinamento per inserzione è O(1). Ciò avviene perché, nell'ordinamento per inserzione, è necessaria una variabile aggiuntiva per lo scambio.

Implementazione dell'ordinamento per inserzione

Vediamo ora i programmi di ordinamento per inserzione nei diversi linguaggi di programmazione.

Programma: Scrivere un programma per implementare l'ordinamento per inserzione in linguaggio C.

 #include void insert(int a[], int n) /* function to sort an aay with insertion sort */ { int i, j, temp; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 17 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[], int n) function print array i; for (i="0;" i < n; i++) printf('%d ', a[i]); main() a[]="{" 12, 31, 25, 8, 32, }; n="sizeof(a)" sizeof(a[0]); printf('before sorting are - 
'); printarr(a, n); insert(a, printf('
after return 0; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-18.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in python.</p> <pre> def insertionSort(a): # Function to implement insertion sort for i in range(1, len(a)): temp = a[i] # Move the elements greater than temp to one position #ahead from their current position j = i-1 while j &gt;= 0 and temp <a[j] : a[j + 1]="a[j]" j="j-1" def printarr(a): # function to print the array for i in range(len(a)): (a[i], end=" " ) a="[70," 15, 2, 51, 60] print('before sorting elements are - ') printarr(a) insertionsort(a) print('
after < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-19.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in C++ language.</p> <pre> #include using namespace std; void insert(int a[], int n) /* function to sort an aay with insertion sort */ { int i, j, temp; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 2 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[], int n) function print array i; for (i="0;" i < n; i++) cout << a[i] <<' '; main() a[]="{" 89, 45, 35, 8, 12, }; n="sizeof(a)" sizeof(a[0]); cout<<'before sorting are - '<<endl; printarr(a, n); insert(a, cout<<'
after return 0; pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-20.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in C# language.</p> <pre> using System; class Insertion { static void insert(int[] a) /* function to sort an aay with insertion sort */ { int i, j, temp; int n = a.Length; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 12 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } static void printarr(int[] a) function print array int i; n="a.Length;" for (i="0;" i < n; i++) console.write(a[i] + ' '); main() int[] a="{" 98, 54, 53, 18, 21, }; console.write('before sorting are - 
'); printarr(a); insert(a); console.write('
after pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-21.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in Java.</p> <pre> public class Insert { void insert(int a[]) /* function to sort an aay with insertion sort */ { int i, j, temp; int n = a.length; for (i = 1; i <n; i++) { temp="a[i];" j="i" - 1; while(j>=0 &amp;&amp; temp <= 22 a[j]) * move the elements greater than temp to one position ahead from their current position* { a[j+1]="a[j];" j="j-1;" } void printarr(int a[]) function print array int i; n="a.length;" for (i="0;" i < n; i++) system.out.print(a[i] + ' '); public static main(string[] args) a[]="{" 92, 50, 5, 20, 11, }; insert i1="new" insert(); system.out.println('
before sorting are - i1.printarr(a); i1.insert(a); system.out.println('

after system.out.println(); pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-22.webp" alt="Insertion Sort Algorithm"> <p> <strong>Program:</strong> Write a program to implement insertion sort in PHP.</p> <pre> <?php $a = array( 92, 50, 5, 20, 11, 22 ); function printArray($a) { for($i = 0; $i < 6; $i++) { print_r($a[$i]); echo ' '; } } echo 'Before sorting array elements are - <br>&apos;; printArray($a); for ($i = 1; $i = 0 &amp;&amp; $temp <= $a[$j]) * move the elements greater than temp to one position ahead from their current position* { $a[$j+1]="$a[$j];" $j="$j-1;" } echo ' <br> After sorting array elements are - <br>&apos;; printArray($a); ?&gt; </=></pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/ds-tutorial/03/insertion-sort-algorithm-23.webp" alt="Insertion Sort Algorithm"> <p>So, that&apos;s all about the article. Hope the article will be helpful and informative to you.</p> <p>This article was not only limited to the algorithm. We have also discussed the algorithm&apos;s complexity, working, and implementation in different programming languages.</p> <hr></=></n;></pre></=></n;></pre></=></n;></pre></a[j]></pre></=></n;>

Produzione:

Algoritmo di ordinamento per inserimento

Quindi, questo è tutto sull'articolo. Spero che l'articolo ti sia utile e informativo.

Questo articolo non si limitava solo all'algoritmo. Abbiamo anche discusso la complessità, il funzionamento e l'implementazione dell'algoritmo in diversi linguaggi di programmazione.