logo

Алгоритм сортування вставкою

У цій статті ми обговоримо алгоритм сортування вставкою. Робоча процедура сортування вставкою також проста. Ця стаття буде дуже корисною та цікавою для студентів, оскільки вони можуть зіткнутися зі вставкою як запитання під час своїх іспитів. Тому важливо обговорити тему.

Сортування за допомогою вставки працює подібно до сортування гральних карт у руках. Передбачається, що перша карта вже відсортована в картковій грі, а потім ми вибираємо невідсортовану картку. Якщо вибрана несортована картка більша за першу, вона буде розміщена праворуч; інакше він буде розміщено зліва. Подібним чином усі несортовані картки беруться та кладуться на своє місце.

Той самий підхід застосовано до сортування вставкою. Ідея сортування вставкою полягає в тому, що спочатку візьміть один елемент і повторіть його через відсортований масив. Незважаючи на те, що він простий у використанні, він не підходить для великих наборів даних, оскільки часова складність сортування вставки в середньому та гіршому випадку становить O(n2) , де n – кількість предметів. Сортування за допомогою вставки є менш ефективним, ніж інші алгоритми сортування, такі як сортування купи, швидке сортування, сортування злиттям тощо.

Сортування вставлення має ряд переваг, таких як:

  • Проста реалізація
  • Ефективно для невеликих наборів даних
  • Адаптивний, тобто підходить для наборів даних, які вже значною мірою відсортовані.

Тепер розглянемо алгоритм сортування вставкою.

Алгоритм

Нижче наведено прості кроки для досягнення сортування вставкою:

Крок 1 - Якщо елемент є першим елементом, припустимо, що він уже відсортований. Повернення 1.

картинки з icloud на android

Крок 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. Складність часу

Справа Складність часу
Кращий випадок O(n)
Середній випадок O(n2)
Найгірший випадок O(n2)
    Найкращий варіант складності -Це відбувається, коли сортування не потрібно, тобто масив уже відсортовано. Оптимальна часова складність сортування вставки O(n) .Середня складність справи -Це відбувається, коли елементи масиву розташовані в перемішаному порядку, який неправильно зростає та спадає. Середня складність випадку сортування вставки становить O(n2) .Найгірша складність -Це відбувається, коли елементи масиву потрібно відсортувати у зворотному порядку. Це означає, що ви повинні відсортувати елементи масиву в порядку зростання, але його елементи розташовані в порядку спадання. Найгірша часова складність сортування вставки O(n2) .

2. Просторова складність

Космічна складність O(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;>

Вихід:

Алгоритм сортування вставкою

Отже, це все про статтю. Сподіваюся, стаття буде для вас корисною та інформативною.

Ця стаття не обмежилася лише алгоритмом. Ми також обговорили складність алгоритму, роботу та реалізацію на різних мовах програмування.