logo

Indsættelsessortering – Datastruktur og algoritmevejledninger

Indsættelsessortering er en simpel sorteringsalgoritme, der fungerer ved iterativt at indsætte hvert element i en usorteret liste i dens korrekte position i en sorteret del af listen. Det er en stabil sortering algoritme, hvilket betyder, at elementer med lige værdier bevarer deres relative rækkefølge i det sorterede output.

Indsættelsessortering er som at sortere spillekort i hænderne. Du deler kortene op i to grupper: de sorterede kort og de usorterede kort. Derefter vælger du et kort fra den usorterede gruppe og sætter det på det rigtige sted i den sorterede gruppe.



Algoritme for indsættelsessortering:

Indsættelsessortering er en simpel sorteringsalgoritme, der fungerer ved at bygge et sorteret array et element ad gangen. Det betragtes som en på plads sorteringsalgoritme, hvilket betyder, at den ikke kræver yderligere hukommelsesplads ud over det originale array.

Algoritme:

Følg disse trin for at opnå indsættelsessortering:



installere maven
  • Vi skal starte med andet element i arrayet, da det første element i arrayet antages at være sorteret.
  • Sammenlign andet element med det første element, og kontroller, om det andet element er mindre, og skift dem derefter.
  • Flyt til det tredje element og sammenlign det med det andet element, derefter det første element, og skift efter behov for at placere det i den korrekte position blandt de første tre elementer.
  • Fortsæt denne proces, sammenlign hvert element med dem før det og skift efter behov for at placere det i den korrekte position blandt de sorterede elementer.
  • Gentag indtil hele arrayet er sorteret.

Funktion af indsættelsessorteringsalgoritme:

Overvej et array med elementer : {23, 1, 10, 5, 2}

Første pas:



  • Nuværende element er 23
  • Det første element i arrayet antages at være sorteret.
  • Den sorterede del indtil 0 indeks er: [23]

Andet pas:

  • Sammenligne 1 med 23 (aktuelt element med den sorterede del).
  • Siden 1 er mindre, indsæt 1 Før 23 .
  • Den sorterede del indtil 1 indeks er: [1, 23]

Tredje pas:

java string.format
  • Sammenligne 10 med 1 og 23 (aktuelt element med den sorterede del).
  • Siden 10 er større end 1 og mindre end 23 , indsætte 10 mellem 1 og 23 .
  • Den sorterede del indtil 2 indeks er: [1, 10, 23]

Fjerde pas:

  • Sammenligne 5 med 1 , 10 , og 23 (aktuelt element med den sorterede del).
  • Siden 5 er større end 1 og mindre end 10 , indsætte 5 mellem 1 og 10 .
  • Den sorterede del indtil 3 indeks er : [1, 5, 10, 23]

Femte pas:

git status -s
  • Sammenligne 2 med 1, 5, 10 , og 23 (aktuelt element med den sorterede del).
  • Siden 2 er større end 1 og mindre end 5 indsætte 2 mellem 1 og 5 .
  • Den sorterede del indtil 4 indeks er: [1, 2, 5, 10, 23]

Final Array:

  • Det sorterede array er: [1, 2, 5, 10, 23]
Anbefalet praksis indsættelse Sorter Prøv det!

Implementering af indsættelsessortering:

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]> tast) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nøgle;  } } // En hjælpefunktion til at udskrive et array // af størrelse n void printArray(int arr[], int n) { int i;  for (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]> tast) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nøgle;  } } // En hjælpefunktion til at udskrive et array af størrelse n void printArray(int arr[], int n) { int i;  for (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]> tast) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nøgle;  } } /* En hjælpefunktion til at udskrive array af størrelse n*/ static void printArray(int arr[]) { int n = arr.length;  for (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 og tast< 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]> tast) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = nøgle;  } } // En hjælpefunktion til at udskrive // ​​array af størrelse n static void printArray(int[] arr) { int n = arr.Length;  for (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øgle; } } // En hjælpefunktion til // at udskrive en matrix af størrelse 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>

Tidskompleksitet: O(N^2)
Hjælpeplads: O(1)

Kompleksitetsanalyse af indsættelsessortering :

Tidskompleksitet af indsættelsessortering

  • Bedste tilfælde: På) , Hvis listen allerede er sorteret, hvor n er antallet af elementer på listen.
  • Gennemsnitligt tilfælde: 2 ) , Hvis listen er tilfældigt ordnet
  • Worst case: 2 ) , Hvis listen er i omvendt rækkefølge

Rumkompleksitet af Indsættelsessort

  • Hjælpeplads: O(1), Indsættelsessortering kræver O(1) ekstra plads, hvilket gør det til en pladseffektiv sorteringsalgoritme.

Fordele af indsættelsessort:

  • Enkel og nem at implementere.
  • Stabil sorteringsalgoritme.
  • Effektiv til små lister og næsten sorterede lister.
  • Pladseffektiv.

Ulemper af indsættelsessort:

  • Ineffektiv til store lister.
  • Ikke så effektiv som andre sorteringsalgoritmer (f.eks. flette sortering, hurtig sortering) i de fleste tilfælde.

Ansøgninger af indsættelsessort:

Indsættelsessortering bruges almindeligvis i situationer, hvor:

  • Listen er lille eller næsten sorteret.
  • Enkelhed og stabilitet er vigtigt.

Ofte stillede spørgsmål om indsættelsessortering

Q1. Hvad er grænsetilfældene for indsættelsessorteringsalgoritmen?

Indsættelsessortering tager den maksimale tid at sortere, hvis elementer er sorteret i omvendt rækkefølge. Og det tager minimum tid (rækkefølge af n), når elementer allerede er sorteret.

Q2. Hvad er det algoritmiske paradigme for indsættelsessorteringsalgoritmen?

Algoritmen for indsættelsessortering følger en trinvis tilgang.

Q3. Er indsættelsessortering en in-place sorteringsalgoritme?

hvad er build-essentiel ubuntu

Ja, indsættelsessortering er en in-place sorteringsalgoritme.

Q4. Er Insertion Sort en stabil algoritme?

Ja, indsættelsessortering er en stabil sorteringsalgoritme.

Q5. Hvornår bruges indsættelsessorteringsalgoritmen?

hiba bukhari

Indsættelsessortering bruges, når antallet af elementer er lille. Det kan også være nyttigt, når input-arrayet næsten er sorteret, og kun få elementer er malplaceret i et komplet stort array.