logo

Algoritme d'ordenació d'inserció

En aquest article, parlarem de l'algoritme d'ordenació d'inserció. El procediment de treball de classificació d'inserció també és senzill. Aquest article serà molt útil i interessant per als estudiants, ja que podrien enfrontar-se a l'ordenació d'inserció com a pregunta en els seus exàmens. Per tant, és important parlar del tema.

L'ordenació per inserció funciona de manera similar a l'ordenació de cartes a les mans. Se suposa que la primera carta ja està ordenada al joc de cartes, i després seleccionem una carta sense classificar. Si la carta no ordenada seleccionada és més gran que la primera, es col·locarà al costat dret; en cas contrari, es col·locarà al costat esquerre. De la mateixa manera, totes les cartes sense classificar es prenen i es posen al seu lloc exacte.

El mateix enfocament s'aplica a l'ordenació d'inserció. La idea darrere de l'ordenació d'inserció és que primer agafeu un element i l'itereu a través de la matriu ordenada. Tot i que és senzill d'utilitzar, no és adequat per a grans conjunts de dades, ja que la complexitat temporal de l'ordenació d'inserció en el cas mitjà i en el pitjor dels casos és O (n2) , on n és el nombre d'elements. L'ordenació per inserció és menys eficient que els altres algorismes d'ordenació, com ara l'ordenació de pila, l'ordenació ràpida, l'ordenació per fusió, etc.

La classificació per inserció té diversos avantatges, com ara:

  • Implementació senzilla
  • Eficaç per a petits conjunts de dades
  • Adaptatiu, és a dir, és adequat per a conjunts de dades que ja estan substancialment ordenats.

Ara, vegem l'algorisme d'ordenació d'inserció.

Algorisme

Els passos senzills per aconseguir l'ordenació d'inserció s'enumeren de la següent manera:

Pas 1 - Si l'element és el primer element, suposa que ja està ordenat. Tornar 1.

herència en c++

Pas 2 - Trieu l'element següent i deseu-lo per separat a a clau.

Pas 3 - Ara, compara el clau amb tots els elements de la matriu ordenada.

Pas 4 - Si l'element de la matriu ordenada és més petit que l'element actual, passeu a l'element següent. En cas contrari, desplaceu els elements més grans de la matriu cap a la dreta.

Pas 5 - Insereix el valor.

Pas 6 - Repetiu fins que la matriu estigui ordenada.

Funcionament de l'algoritme d'ordenació d'inserció

Ara, vegem el funcionament de l'algoritme d'ordenació d'inserció.

Per entendre el funcionament de l'algorisme d'ordenació d'inserció, prenem una matriu sense ordenar. Serà més fàcil entendre l'ordenació d'inserció mitjançant un exemple.

Siguin els elements de la matriu -

Algoritme d'ordenació d'inserció

Inicialment, els dos primers elements es comparen en l'ordenació d'inserció.

Algoritme d'ordenació d'inserció

Aquí, 31 és més gran que 12. Això vol dir que els dos elements ja estan en ordre ascendent. Per tant, de moment, 12 s'emmagatzema en una submatriu ordenada.

Algoritme d'ordenació d'inserció

Ara, passeu als dos elements següents i compareu-los.

Algoritme d'ordenació d'inserció

Aquí, 25 és més petit que 31. Per tant, 31 no està en la posició correcta. Ara, intercanvieu 31 amb 25. Juntament amb l'intercanvi, l'ordenació per inserció també el comprovarà amb tots els elements de la matriu ordenada.

De moment, la matriu ordenada només té un element, és a dir, 12. Per tant, 25 és més gran que 12. Per tant, la matriu ordenada roman ordenada després de l'intercanvi.

Algoritme d'ordenació d'inserció

Ara, dos elements de la matriu ordenada són 12 i 25. Avança als següents elements que són 31 i 8.

Algoritme d'ordenació d'inserció

Tant el 31 com el 8 no estan ordenats. Per tant, intercanvieu-los.

Algoritme d'ordenació d'inserció

Després de l'intercanvi, els elements 25 i 8 no es classifiquen.

Algoritme d'ordenació d'inserció

Per tant, intercanvieu-los.

Algoritme d'ordenació d'inserció

Ara, els elements 12 i 8 no estan ordenats.

Algoritme d'ordenació d'inserció

Per tant, intercanvieu-los també.

Algoritme d'ordenació d'inserció

Ara, la matriu ordenada té tres elements que són 8, 12 i 25. Passeu als elements següents que són 31 i 32.

Algoritme d'ordenació d'inserció

Per tant, ja estan ordenats. Ara, la matriu ordenada inclou 8, 12, 25 i 31.

Algoritme d'ordenació d'inserció

Passeu als elements següents que són 32 i 17.

Algoritme d'ordenació d'inserció

17 és més petit que 32. Per tant, canvieu-los.

Algoritme d'ordenació d'inserció

L'intercanvi fa que el 31 i el 17 no estiguin ordenats. Per tant, intercanvieu-los també.

Algoritme d'ordenació d'inserció

Ara, l'intercanvi fa que 25 i 17 no estiguin ordenats. Per tant, torneu a fer l'intercanvi.

Algoritme d'ordenació d'inserció

Ara, la matriu està completament ordenada.

Complexitat d'ordenació d'inserció

Ara, vegem la complexitat temporal de l'ordenació d'inserció en el millor dels casos, en el cas mitjà i en el pitjor dels casos. També veurem la complexitat espacial de l'ordenació d'inserció.

1. Complexitat temporal

Caixa Complexitat temporal
Millor cas O(n)
Cas mitjà O (n2)
Pitjor dels casos O (n2)
    Complexitat del millor cas -Es produeix quan no cal ordenar, és a dir, la matriu ja està ordenada. El millor dels casos és la complexitat temporal de l'ordenació d'inserció O(n) .Complexitat mitjana del cas -Es produeix quan els elements de la matriu estan en ordre desordenat que no és correctament ascendent i no descendent correctament. La complexitat mitjana del temps de cas de l'ordenació d'inserció és O (n2) .Complexitat del pitjor cas -Es produeix quan els elements de la matriu s'han d'ordenar en ordre invers. Això vol dir que suposem que heu d'ordenar els elements de la matriu en ordre ascendent, però els seus elements estan en ordre descendent. La complexitat temporal del pitjor dels casos de l'ordenació d'inserció és O (n2) .

2. Complexitat espacial

Complexitat espacial O(1)
Estable
  • La complexitat espacial de l'ordenació d'inserció és O(1). És perquè, en l'ordenació d'inserció, es requereix una variable addicional per intercanviar.

Implementació de l'ordenació d'inserció

Ara, vegem els programes d'inserció ordenats en diferents llenguatges de programació.

Programa: Escriu un programa per implementar l'ordenació d'inserció en llenguatge 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;>

Sortida:

Algoritme d'ordenació d'inserció

Per tant, això és tot sobre l'article. Espero que l'article us sigui útil i informatiu.

Aquest article no es limitava només a l'algorisme. També hem comentat la complexitat, el funcionament i la implementació de l'algorisme en diferents llenguatges de programació.