logo

Sortering av infogning – Självstudier för datastruktur och algoritmer

Insättningssort är en enkel sorteringsalgoritm som fungerar genom att iterativt infoga varje element i en osorterad lista till sin korrekta position i en sorterad del av listan. Det är en stabil sortering algoritm, vilket innebär att element med lika värden bibehåller sin relativa ordning i den sorterade utmatningen.

Insättningssort är som att sortera spelkort i händerna. Du delar upp korten i två grupper: de sorterade korten och de osorterade korten. Sedan väljer du ett kort från den osorterade gruppen och lägger det på rätt plats i den sorterade gruppen.



Insättningssorteringsalgoritm:

Insättningssort är en enkel sorteringsalgoritm som fungerar genom att bygga en sorterad array ett element i taget. Det anses vara en på plats sorteringsalgoritm, vilket innebär att den inte kräver något extra minnesutrymme utöver den ursprungliga arrayen.

java-anslutning mysql

Algoritm:

Följ dessa steg för att uppnå sortering av infogning:



  • Vi måste börja med det andra elementet i arrayen eftersom det första elementet i arrayen antas vara sorterat.
  • Jämför det andra elementet med det första elementet och kontrollera om det andra elementet är mindre och byt sedan ut dem.
  • Flytta till det tredje elementet och jämför det med det andra elementet, sedan det första elementet och byt efter behov för att placera det i rätt position bland de första tre elementen.
  • Fortsätt denna process, jämför varje element med de före det och byt efter behov för att placera det i rätt position bland de sorterade elementen.
  • Upprepa tills hela arrayen är sorterad.

Arbete med insättningssorteringsalgoritm:

Tänk på att en array har element : {23, 1, 10, 5, 2}

Första passet:



  • Nuvarande element är 23
  • Det första elementet i arrayen antas vara sorterat.
  • Den sorterade delen tills 0:e index är: [23]

Andra passet:

  • Jämföra 1 med 23 (nuvarande element med den sorterade delen).
  • Eftersom 1 är mindre, infoga 1 innan 23 .
  • Den sorterade delen tills 1:a index är: [1, 23]

Tredje passet:

lagrad programkontroll
  • Jämföra 10 med 1 och 23 (nuvarande element med den sorterade delen).
  • Eftersom 10 är större än 1 och mindre än 23 , Föra in 10 mellan 1 och 23 .
  • Den sorterade delen tills 2:a index är: [1, 10, 23]

Fjärde passet:

  • Jämföra 5 med 1 , 10 , och 23 (nuvarande element med den sorterade delen).
  • Eftersom 5 är större än 1 och mindre än 10 , Föra in 5 mellan 1 och 10 .
  • Den sorterade delen tills 3:a index är : [1, 5, 10, 23]

Femte passet:

  • Jämföra 2 med 1, 5, 10 , och 23 (nuvarande element med den sorterade delen).
  • Eftersom 2 är större än 1 och mindre än 5 Föra in 2 mellan 1 och 5 .
  • Den sorterade delen tills 4:a index är: [1, 2, 5, 10, 23]

Final Array:

  • Den sorterade matrisen är: [1, 2, 5, 10, 23]
Rekommenderad praxisinsättning Sortera Prova!

Implementering av insättningssortering:

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]> nyckel) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nyckel;  } } // En verktygsfunktion för att skriva ut en array // av storleken n void printArray(int arr[], int n) { int i;  för (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]> nyckel) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nyckel;  } } // En verktygsfunktion för att skriva ut en array av storleken n void printArray(int arr[], int n) { int i;  för (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]> nyckel) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nyckel;  } } /* En verktygsfunktion för att skriva ut array med storleken n*/ static void printArray(int arr[]) { int n = arr.length;  för (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. */>
Pytonorm
# 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 och tangent< 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]> nyckel) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nyckel;  } } // En verktygsfunktion för att skriva ut // array av storlek n static void printArray(int[] arr) { int n = arr.Length;  för (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] = $nyckel; } } // En verktygsfunktion för att // skriva ut en array med storlek n funktion 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. ?>>

Produktion
5 6 11 12 13>

Tidskomplexitet: O(N^2)
Hjälputrymme: O(1)

Komplexitetsanalys av insättningssortering :

Tidskomplexitet för insättningssortering

  • Bästa fall: På) , Om listan redan är sorterad, där n är antalet element i listan.
  • Genomsnittligt fall: 2 ) , Om listan är slumpmässigt ordnad
  • Värsta fall: 2 ) , Om listan är i omvänd ordning

Rymdkomplexitet av insättningssort

  • Hjälputrymme: O(1), Insättningssortering kräver O(1) extra utrymme, vilket gör det till en utrymmeseffektiv sorteringsalgoritm.

Fördelar av insättningssort:

  • Enkel och lätt att implementera.
  • Stabil sorteringsalgoritm.
  • Effektivt för små listor och nästan sorterade listor.
  • Utrymmeseffektiv.

Nackdelar av insättningssort:

  • Ineffektivt för stora listor.
  • Inte lika effektiva som andra sorteringsalgoritmer (t.ex. sammanslagningssortering, snabbsortering) i de flesta fall.

Ansökningar av insättningssort:

Insättningssortering används vanligtvis i situationer där:

  • Listan är liten eller nästan sorterad.
  • Enkelhet och stabilitet är viktigt.

Vanliga frågor om insättningssortering

Q1. Vilka är gränsfallen för insättningssorteringsalgoritmen?

python tuppel sorterad

Insättningssortering tar maximal tid att sortera om element sorteras i omvänd ordning. Och det tar minsta tid (ordning på n) när element redan är sorterade.

Q2. Vad är det algoritmiska paradigmet för insättningssorteringsalgoritmen?

Algoritmen för insättningssortering följer en inkrementell metod.

Q3. Är insättningssortering en sorteringsalgoritm på plats?

Ja, sortering av infogning är en sorteringsalgoritm på plats.

Q4. Är Insertion Sort en stabil algoritm?

csv-fil läs java

Ja, insättningssortering är en stabil sorteringsalgoritm.

F5. När används insättningssorteringsalgoritmen?

Insättningssortering används när antalet element är litet. Det kan också vara användbart när inmatningsmatrisen nästan är sorterad, och endast ett fåtal element är felplacerade i en komplett stor matris.