logo

Сортування вставкою – Навчальні посібники зі структури даних і алгоритмів

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

Сортування вставкою це як сортування гральних карт у ваших руках. Ви розділите картки на дві групи: відсортовані картки та несортовані картки. Потім ви вибираєте картку з несортованої групи та кладете її в потрібне місце в сортованій групі.



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

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

Алгоритм:

Щоб виконати сортування вставкою, виконайте такі дії:



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

Робота алгоритму сортування вставкою:

Розглянемо масив, що має елементи : {23, 1, 10, 5, 2}

Перший прохід:



  • Поточний елемент є 23
  • Перший елемент у масиві вважається відсортованим.
  • Відсортована частина поки 0-й індекс це: [23]

Другий прохід:

  • Порівняйте 1 з 23 (поточний елемент із відсортованою частиною).
  • Оскільки 1 менше, встав 1 раніше 23 .
  • Відсортована частина поки 1-й індекс це: [1, 23]

Третій прохід:

простий форматування дати в java
  • Порівняйте 10 з 1 і 23 (поточний елемент із відсортованою частиною).
  • Оскільки 10 більше ніж 1 і менше ніж 23 , вставити 10 між 1 і 23 .
  • Відсортована частина поки 2-й індекс це: [1, 10, 23]

Четвертий прохід:

  • Порівняйте 5 з 1 , 10 , і 23 (поточний елемент із відсортованою частиною).
  • Оскільки 5 більше ніж 1 і менше ніж 10 , вставити 5 між 1 і 10 .
  • Відсортована частина поки 3-й індекс є : [1, 5, 10, 23]

П'ятий прохід:

3d в автокад
  • Порівняйте 2 з 1, 5, 10 , і 23 (поточний елемент із відсортованою частиною).
  • Оскільки 2 більше ніж 1 і менше ніж 5 вставка 2 між 1 і 5 .
  • Відсортована частина поки 4-й індекс це: [1, 2, 5, 10, 23]

Остаточний масив:

  • Відсортований масив: [1, 2, 5, 10, 23]
Рекомендована практика Вставка Сортування Спробуйте!

Реалізація сортування вставкою:

C++
// C++ program for insertion sort #include  using namespace std; // Function to sort an array using // insertion sort void insertionSort(int arr[], int n) {  int i, key, j;  for (i = 1; i < n; i++) {  key = arr[i];  j = i - 1;  // Move elements of arr[0..i-1],  // that are greater than key,   // to one position ahead of their  // current position  while (j>= 0 && arr[j]> ключ) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = ключ;  } } // Допоміжна функція для друку масиву // розміром n void printArray(int arr[], int n) { int i;  для (i = 0; i< n; i++)  cout << arr[i] << ' ';  cout << endl; } // Driver code int main() {  int arr[] = { 12, 11, 13, 5, 6 };  int N = sizeof(arr) / sizeof(arr[0]);  insertionSort(arr, N);  printArray(arr, N);  return 0; } // This is code is contributed by rathbhupendra>
C
// C program for insertion sort #include  #include  /* Function to sort an array using insertion sort*/ void insertionSort(int arr[], int n) {  int i, key, j;  for (i = 1; i < n; i++) {  key = arr[i];  j = i - 1;  /* Move elements of arr[0..i-1], that are  greater than key, to one position ahead  of their current position */  while (j>= 0 && arr[j]> ключ) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = ключ;  } } // Допоміжна функція для друку масиву розміром n void printArray(int arr[], int n) { int i;  для (i = 0; i< n; i++)  printf('%d ', arr[i]);  printf('
'); } /* Driver program to test insertion sort */ int main() {  int arr[] = { 12, 11, 13, 5, 6 };  int n = sizeof(arr) / sizeof(arr[0]);  insertionSort(arr, n);  printArray(arr, n);  return 0; }>
Java
// Java program for implementation of Insertion Sort public class InsertionSort {  /*Function to sort array using insertion sort*/  void sort(int arr[])  {  int n = arr.length;  for (int i = 1; i < n; ++i) {  int key = arr[i];  int j = i - 1;  /* Move elements of arr[0..i-1], that are  greater than key, to one position ahead  of their current position */  while (j>= 0 && arr[j]> ключ) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = ключ;  } } /* Допоміжна функція для друку масиву розміром n*/ static void printArray(int arr[]) { int n = arr.length;  для (int i = 0; i< n; ++i)  System.out.print(arr[i] + ' ');  System.out.println();  }  // Driver method  public static void main(String args[])  {  int arr[] = { 12, 11, 13, 5, 6 };  InsertionSort ob = new InsertionSort();  ob.sort(arr);  printArray(arr);  } }; /* This code is contributed by Rajat Mishra. */>
Python
# Python program for implementation of Insertion Sort # Function to do insertion sort def insertionSort(arr): # Traverse through 1 to len(arr) for i in range(1, len(arr)): key = arr[i] # Move elements of arr[0..i-1], that are # greater than key, to one position ahead # of their current position j = i-1 while j>= 0 і ключ< arr[j] : arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key # Driver code to test above arr = [12, 11, 13, 5, 6] insertionSort(arr) for i in range(len(arr)): print ('% d' % arr[i]) # This code is contributed by Mohit Kumra>
C#
// C# program for implementation of Insertion Sort using System; class InsertionSort {  // Function to sort array  // using insertion sort  void sort(int[] arr)  {  int n = arr.Length;  for (int i = 1; i < n; ++i) {  int key = arr[i];  int j = i - 1;  // Move elements of arr[0..i-1],  // that are greater than key,  // to one position ahead of  // their current position  while (j>= 0 && arr[j]> ключ) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = ключ;  } } // Допоміжна функція для друку // масиву розміром n static void printArray(int[] arr) { int n = arr.Length;  для (int i = 0; i< n; ++i)  Console.Write(arr[i] + ' ');  Console.Write('
');  }  // Driver Code  public static void Main()  {  int[] arr = { 12, 11, 13, 5, 6 };  InsertionSort ob = new InsertionSort();  ob.sort(arr);  printArray(arr);  } } // This code is contributed by ChitraNayal.>
Javascript
>
PHP
 // PHP program for insertion sort // Function to sort an array // using insertion sort function insertionSort(&$arr, $n) { for ($i = 1; $i < $n; $i++) { $key = $arr[$i]; $j = $i-1; // Move elements of arr[0..i-1], // that are greater than key, to  // one position ahead of their  // current position while ($j>= 0 && $arr[$j]> $key) { $arr[$j + 1] = $arr[$j]; $j = $j - 1; } $arr[$j + 1] = $ключ; } } // Допоміжна функція для // друку масиву розміром n function printArray(&$arr, $n) { for ($i = 0; $i< $n; $i++) echo $arr[$i].' '; echo '
'; } // Driver Code $arr = array(12, 11, 13, 5, 6); $n = sizeof($arr); insertionSort($arr, $n); printArray($arr, $n); // This code is contributed by ChitraNayal. ?>>

Вихід
5 6 11 12 13>

Часова складність: O(N^2)
Допоміжний простір: О(1)

Аналіз складності сортування вставкою :

Часова складність сортування вставкою

  • Найкращий випадок: O(n) , Якщо список уже відсортовано, де n — кількість елементів у списку.
  • Середній випадок: O(n 2 ) , Якщо список упорядкований у випадковому порядку
  • Найгірший випадок: O(n 2 ) , Якщо список у зворотному порядку

Космічна складність Сортування вставки

  • Допоміжний простір: O(1), вимагає сортування вставкою О(1) додатковий простір, що робить його ефективним алгоритмом сортування.

Переваги Сортування вставки:

  • Простий і легкий у виконанні.
  • Стабільний алгоритм сортування.
  • Ефективно для невеликих і майже відсортованих списків.
  • Економний простір.

Недоліки Сортування вставки:

  • Неефективно для великих списків.
  • У більшості випадків не настільки ефективні, як інші алгоритми сортування (наприклад, сортування злиттям, швидке сортування).

Додатки Сортування вставки:

Сортування вставкою зазвичай використовується в ситуаціях, коли:

  • Список невеликий або майже відсортований.
  • Важливі простота і стабільність.

Часті запитання щодо сортування вставкою

Q1. Які граничні випадки алгоритму сортування вставкою?

Сортування вставленням займає максимальний час для сортування, якщо елементи сортуються у зворотному порядку. І це займає мінімальний час (порядку n), коли елементи вже відсортовані.

Q2. Що таке алгоритмічна парадигма алгоритму сортування вставкою?

Алгоритм сортування вставкою використовує поступовий підхід.

Q3. Чи є сортування вставкою алгоритмом сортування на місці?

перетворити рядок на enum

Так, сортування вставкою — це алгоритм сортування на місці.

Q4. Чи є сортування вставкою стабільним алгоритмом?

Так, сортування вставкою є стабільним алгоритмом сортування.

Q5. Коли використовується алгоритм сортування вставкою?

c масив рядків

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