logo

Algoritmus triedenia vloženia

V tomto článku budeme diskutovať o algoritme triedenia vloženia. Pracovný postup triedenia vkladania je tiež jednoduchý. Tento článok bude pre študentov veľmi užitočný a zaujímavý, pretože sa pri skúškach môžu stretnúť s otázkou vkladania. Preto je dôležité diskutovať o téme.

Vkladanie tried funguje podobne ako triedenie hracích kariet v rukách. Predpokladá sa, že prvá karta je už v kartovej hre zoradená a potom vyberieme netriedenú kartu. Ak je vybratá netriedená karta väčšia ako prvá karta, umiestni sa na pravú stranu; v opačnom prípade bude umiestnený na ľavej strane. Podobne sa vezmú všetky neroztriedené karty a umiestnia sa na svoje presné miesto.

Rovnaký prístup sa používa pri triedení vkladania. Myšlienka triedenia vloženia je taká, že najprv vezmete jeden prvok a iterujete ho cez triedené pole. Hoci sa používa jednoducho, nie je vhodný pre veľké súbory údajov, pretože časová zložitosť triedenia vkladania v priemernom prípade a najhoršom prípade je O(n2) , kde n je počet položiek. Triedenie vkladania je menej efektívne ako iné triediace algoritmy, ako napríklad triedenie haldy, rýchle triedenie, triedenie zlúčením atď.

Triedenie vkladania má rôzne výhody, ako napr.

  • Jednoduchá implementácia
  • Efektívne pre malé súbory údajov
  • Adaptívny, t. j. je vhodný pre súbory údajov, ktoré sú už podstatne zoradené.

Teraz sa pozrime na algoritmus triedenia vkladania.

Algoritmus

Jednoduché kroky na dosiahnutie zoradenia vloženia sú uvedené nasledovne -

Krok 1 - Ak je prvok prvým prvkom, predpokladajme, že je už zoradený. Návrat 1.

java pripojiť sa k mysql

Krok 2 - Vyberte ďalší prvok a uložte ho samostatne do a kľúč.

Krok 3 - Teraz porovnajte kľúč so všetkými prvkami v triedenom poli.

Krok 4 - Ak je prvok v zoradenom poli menší ako aktuálny prvok, prejdite na ďalší prvok. V opačnom prípade posuňte väčšie prvky v poli doprava.

Krok 5 - Vložte hodnotu.

Krok 6 - Opakujte, kým sa pole neroztriedi.

Fungovanie algoritmu triedenia vkladania

Teraz sa pozrime na fungovanie algoritmu triedenia vkladania.

Aby sme pochopili fungovanie algoritmu triedenia vloženia, zoberme si nezoradené pole. Pomocou príkladu bude jednoduchšie pochopiť triedenie vkladania.

Nech sú prvky poľa -

Algoritmus triedenia vloženia

Na začiatku sa prvé dva prvky porovnajú podľa typu vloženia.

Algoritmus triedenia vloženia

Tu je 31 väčšie ako 12. To znamená, že oba prvky sú už vo vzostupnom poradí. Takže zatiaľ je 12 uložených v triedenom podpole.

Algoritmus triedenia vloženia

Teraz prejdite na ďalšie dva prvky a porovnajte ich.

Algoritmus triedenia vloženia

Tu je 25 menšie ako 31. Takže 31 nie je v správnej polohe. Teraz zameňte 31 za 25. Spolu so zámenou ho triedenie vložením skontroluje aj so všetkými prvkami v triedenom poli.

Zoradené pole má zatiaľ iba jeden prvok, t. j. 12. Čiže 25 je väčšie ako 12. Zoradené pole teda zostane zoradené aj po výmene.

Algoritmus triedenia vloženia

Teraz sú dva prvky v zoradenom poli 12 a 25. Prejdite vpred na ďalšie prvky, ktoré sú 31 a 8.

Algoritmus triedenia vloženia

31 aj 8 nie sú zoradené. Tak ich vymeňte.

Algoritmus triedenia vloženia

Po výmene sú prvky 25 a 8 neroztriedené.

Algoritmus triedenia vloženia

Tak ich vymeňte.

Algoritmus triedenia vloženia

Teraz sú prvky 12 a 8 nezoradené.

Algoritmus triedenia vloženia

Tak si ich vymeňte aj vy.

Algoritmus triedenia vloženia

Teraz má zoradené pole tri položky, ktoré sú 8, 12 a 25. Prejdite na ďalšie položky, ktoré sú 31 a 32.

Algoritmus triedenia vloženia

Preto sú už zoradené. Teraz triedené pole obsahuje 8, 12, 25 a 31.

Algoritmus triedenia vloženia

Prejdite na ďalšie prvky, ktoré sú 32 a 17.

Algoritmus triedenia vloženia

17 je menšie ako 32. Takže ich vymeňte.

Algoritmus triedenia vloženia

Zámenou sa 31 a 17 netriedia. Tak si ich vymeňte aj vy.

Algoritmus triedenia vloženia

Teraz zámenou sú 25 a 17 nezoradené. Takže vykonajte výmenu znova.

Algoritmus triedenia vloženia

Teraz je pole úplne zoradené.

Zložitosť zoradenia vkladania

Teraz sa pozrime na časovú zložitosť triedenia vkladania v najlepšom prípade, priemernom prípade a v najhoršom prípade. Uvidíme aj priestorovú náročnosť vkladania sort.

1. Časová zložitosť

Prípad Časová zložitosť
Najlepší prípad O(n)
Priemerný prípad O(n2)
V najhoršom prípade O(n2)
    Najlepšia zložitosť prípadu -Vyskytuje sa, keď nie je potrebné žiadne triedenie, t. j. pole je už zoradené. Časová zložitosť zoradenia vkladania je v najlepšom prípade O(n) .Priemerná zložitosť prípadu -Vyskytuje sa vtedy, keď sú prvky poľa v premiešanom poradí, ktoré nie je správne vzostupné a nesprávne zostupné. Priemerná časová zložitosť prípadu zoradenia vloženia je O(n2) .Zložitosť najhoršieho prípadu -Vyskytuje sa, keď sa vyžaduje, aby boli prvky poľa zoradené v opačnom poradí. To znamená, že musíte zoradiť prvky poľa vo vzostupnom poradí, ale jeho prvky sú v zostupnom poradí. Najhorším prípadom časovej zložitosti triedenia vkladania je O(n2) .

2. Zložitosť priestoru

Priestorová zložitosť O(1)
Stabilný ÁNO
  • Priestorová zložitosť triedenia vkladania je O(1). Je to preto, že pri triedení vkladania je na výmenu potrebná ďalšia premenná.

Implementácia triedenia vkladania

Teraz sa pozrime na programy na vkladanie v rôznych programovacích jazykoch.

Program: Napíšte program na implementáciu triedenia vkladania v jazyku 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;>

Výkon:

Algoritmus triedenia vloženia

Tak, to je o článku všetko. Dúfam, že článok bude pre vás užitočný a poučný.

Tento článok nebol obmedzený len na algoritmus. Diskutovali sme aj o zložitosti, fungovaní a implementácii algoritmu v rôznych programovacích jazykoch.