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 -
Inizialmente, i primi due elementi vengono confrontati nell'ordinamento per inserzione.
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.
Ora passa ai due elementi successivi e confrontali.
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.
Ora, due elementi nell'array ordinato sono 12 e 25. Passa agli elementi successivi che sono 31 e 8.
Sia 31 che 8 non sono ordinati. Quindi scambiateli.
Dopo lo scambio, gli elementi 25 e 8 non sono ordinati.
Quindi scambiateli.
Ora gli elementi 12 e 8 non sono ordinati.
Quindi, scambia anche loro.
Ora, l'array ordinato ha tre elementi che sono 8, 12 e 25. Passa agli elementi successivi che sono 31 e 32.
Quindi sono già ordinati. Ora, l'array ordinato include 8, 12, 25 e 31.
Passa agli elementi successivi che sono 32 e 17.
17 è più piccolo di 32. Quindi scambiali.
Lo scambio rende 31 e 17 non ordinati. Quindi, scambia anche loro.
Ora, lo scambio rende 25 e 17 non ordinati. Quindi, esegui nuovamente lo scambio.
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) |
2. Complessità spaziale
Complessità spaziale | O(1) |
Stabile | SÌ |
- 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 && 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 >= 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 && 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 && 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 && 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>'; printArray($a); for ($i = 1; $i = 0 && $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>'; printArray($a); ?> </=></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'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's complexity, working, and implementation in different programming languages.</p> <hr></=></n;></pre></=></n;></pre></=></n;></pre></a[j]></pre></=></n;>
Produzione:
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.
=>=>=>=>