logo

Алгоритъм за сортиране чрез вмъкване

В тази статия ще обсъдим алгоритъма за сортиране чрез вмъкване. Работната процедура за сортиране на вмъкване също е проста. Тази статия ще бъде много полезна и интересна за студентите, тъй като те може да се сблъскат с вмъкване като въпрос на своите изпити. Така че е важно да обсъдим темата.

Сортирането чрез вмъкване работи подобно на сортирането на карти за игра в ръце. Предполага се, че първата карта вече е сортирана в играта с карти и след това избираме несортирана карта. Ако избраната несортирана карта е по-голяма от първата карта, тя ще бъде поставена от дясната страна; в противен случай ще бъде поставен от лявата страна. По същия начин всички несортирани карти се вземат и поставят на точното им място.

Същият подход се прилага при сортиране чрез вмъкване. Идеята зад сортирането чрез вмъкване е, че първо вземете един елемент, итерирайте го през сортирания масив. Въпреки че е лесен за използване, той не е подходящ за големи набори от данни, тъй като времевата сложност на сортирането на вмъкване в средния и най-лошия случай е На2) , където n е броят на елементите. Сортирането чрез вмъкване е по-малко ефективно от другите алгоритми за сортиране като сортиране на купчина, бързо сортиране, сортиране чрез сливане и т.н.

Сортирането чрез вмъкване има различни предимства като -

  • Просто изпълнение
  • Ефективен за малки набори от данни
  • Адаптивен, т.е. подходящ е за набори от данни, които вече са значително сортирани.

Сега нека видим алгоритъма за сортиране при вмъкване.

Алгоритъм

Простите стъпки за постигане на сортиране на вмъкване са изброени, както следва -

Етап 1 - Ако елементът е първият елемент, приемете, че вече е сортиран. Връщане 1.

не е равно на mysql

Стъпка 2 - Изберете следващия елемент и го съхранете отделно в a ключ.

Стъпка 3 - Сега сравнете ключ с всички елементи в сортирания масив.

Стъпка 4 - Ако елементът в сортирания масив е по-малък от текущия елемент, преминете към следващия елемент. В противен случай преместете по-големите елементи в масива надясно.

Стъпка 5 - Въведете стойността.

Стъпка 6 - Повторете, докато масивът бъде сортиран.

Работа на алгоритъма за сортиране чрез вмъкване

Сега нека видим работата на алгоритъма за сортиране при вмъкване.

За да разберем работата на алгоритъма за сортиране чрез вмъкване, нека вземем несортиран масив. Ще бъде по-лесно да разберете сортирането чрез вмъкване чрез пример.

Нека елементите на масива са -

Алгоритъм за сортиране чрез вмъкване

Първоначално първите два елемента се сравняват при сортиране на вмъкване.

Алгоритъм за сортиране чрез вмъкване

Тук 31 е по-голямо от 12. Това означава, че и двата елемента вече са във възходящ ред. И така, засега 12 се съхранява в сортиран подмасив.

Алгоритъм за сортиране чрез вмъкване

Сега преминете към следващите два елемента и ги сравнете.

Алгоритъм за сортиране чрез вмъкване

Тук 25 е по-малко от 31. Така че 31 не е на правилната позиция. Сега разменете 31 с 25. Заедно с размяната, сортирането при вмъкване също ще го провери с всички елементи в сортирания масив.

Засега сортираният масив има само един елемент, т.е. 12. Така че 25 е по-голямо от 12. Следователно сортираният масив остава сортиран след размяната.

Алгоритъм за сортиране чрез вмъкване

Сега два елемента в сортирания масив са 12 и 25. Преминете напред към следващите елементи, които са 31 и 8.

Алгоритъм за сортиране чрез вмъкване

И 31, и 8 не са сортирани. Така че, разменете ги.

Алгоритъм за сортиране чрез вмъкване

След размяната елементи 25 и 8 не са сортирани.

Алгоритъм за сортиране чрез вмъкване

Така че, разменете ги.

Алгоритъм за сортиране чрез вмъкване

Сега елементи 12 и 8 не са сортирани.

Алгоритъм за сортиране чрез вмъкване

Така че, разменете и тях.

Алгоритъм за сортиране чрез вмъкване

Сега сортираният масив има три елемента, които са 8, 12 и 25. Преминете към следващите елементи, които са 31 и 32.

Алгоритъм за сортиране чрез вмъкване

Следователно те вече са сортирани. Сега сортираният масив включва 8, 12, 25 и 31.

Алгоритъм за сортиране чрез вмъкване

Преминете към следващите елементи, които са 32 и 17.

Алгоритъм за сортиране чрез вмъкване

17 е по-малко от 32. Така че, разменете ги.

Алгоритъм за сортиране чрез вмъкване

Размяната прави 31 и 17 несортирани. Така че, разменете и тях.

Алгоритъм за сортиране чрез вмъкване

Сега размяната прави 25 и 17 несортирани. Така че, извършете размяната отново.

Алгоритъм за сортиране чрез вмъкване

Сега масивът е напълно сортиран.

Сложност на сортиране на вмъкване

Сега нека видим времевата сложност на сортирането на вмъкване в най-добрия случай, средния случай и в най-лошия случай. Ще видим и пространствената сложност на сортирането чрез вмъкване.

1. Времева сложност

Случай Времева сложност
Най-добър случай На)
Среден случай На2)
Най-лошия случай На2)
    Сложност в най-добрия случай -Това се случва, когато не е необходимо сортиране, т.е. масивът вече е сортиран. Най-добрият случай времева сложност на сортиране на вмъкване е На) .Средна сложност на случая -Това се случва, когато елементите на масива са в разбъркан ред, който не е правилно възходящ и неправилно низходящ. Средната времева сложност за сортиране на вмъкване е На2) .Сложност в най-лошия случай -Това се случва, когато елементите на масива трябва да бъдат сортирани в обратен ред. Това означава, че трябва да сортирате елементите на масива във възходящ ред, но неговите елементи са в низходящ ред. Най-лошият случай на времева сложност на сортирането на вмъкване е На2) .

2. Космическа сложност

Космическа сложност О(1)
Стабилен ДА
  • Пространствената сложност на сортирането чрез вмъкване е O(1). Това е така, защото при сортиране чрез вмъкване е необходима допълнителна променлива за размяна.

Внедряване на сортиране чрез вмъкване

Сега нека видим програмите за сортиране на вмъкване в различни езици за програмиране.

програма: Напишете програма за реализиране на сортиране чрез вмъкване на език 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;>

Изход:

Алгоритъм за сортиране чрез вмъкване

И така, това е всичко за статията. Надяваме се, че статията ще ви бъде полезна и информативна.

Тази статия не беше ограничена само до алгоритъма. Ние също така обсъдихме сложността на алгоритъма, работата и изпълнението на различни езици за програмиране.