logo

Įterpimo rūšiavimas – duomenų struktūros ir algoritmų vadovėliai

Įterpimo rūšiavimas yra paprastas rūšiavimo algoritmas, kuris veikia iteratyviai įterpdamas kiekvieną nerūšiuoto sąrašo elementą į teisingą vietą surūšiuotoje sąrašo dalyje. Tai yra stabilus rūšiavimas algoritmas, o tai reiškia, kad elementai su lygiomis reikšmėmis išlaiko santykinę tvarką surūšiuotoje išvestyje.

Įterpimo rūšiavimas yra tarsi žaidimo kortų rūšiavimas rankose. Padalinate korteles į dvi grupes: surūšiuotas ir nerūšiuotas. Tada pasirenkate kortelę iš nerūšiuotos grupės ir įdedate ją į reikiamą vietą surūšiuotoje grupėje.



Įterpimo rūšiavimo algoritmas:

Įterpimo rūšiavimas yra paprastas rūšiavimo algoritmas, kuris veikia vienu metu kuriant surūšiuotą masyvą po vieną elementą. Tai laikoma an vietoje rūšiavimo algoritmas, tai reiškia, kad jam nereikia papildomos atminties vietos, išskyrus pradinį masyvą.

10 geriausių hentai

Algoritmas:

Norėdami rūšiuoti įterpimą, atlikite šiuos veiksmus:



  • Turime pradėti nuo antrojo masyvo elemento, nes manoma, kad pirmasis masyvo elementas yra surūšiuotas.
  • Palyginkite antrąjį elementą su pirmuoju ir patikrinkite, ar antrasis elementas yra mažesnis, tada pakeiskite juos.
  • Pereikite prie trečiojo elemento ir palyginkite jį su antruoju elementu, tada su pirmuoju elementu ir, jei reikia, pakeiskite, kad jis būtų teisingoje vietoje tarp pirmųjų trijų elementų.
  • Tęskite šį procesą, palygindami kiekvieną elementą su buvusiais prieš jį ir, jei reikia, pakeiskite, kad jis būtų tinkamoje vietoje tarp rūšiuotų elementų.
  • Kartokite, kol visas masyvas bus surūšiuotas.

Įterpimo rūšiavimo algoritmo veikimas:

Apsvarstykite masyvą, turintį elementus : {23, 1, 10, 5, 2}

Pirmas leidimas:



  • Dabartinis elementas yra 23
  • Manoma, kad pirmasis masyvo elementas yra surūšiuotas.
  • Surūšiuota dalis iki 0 indeksas yra: [23]

Antrasis leidimas:

  • Palyginti 1 su 23 (dabartinis elementas su surūšiuota dalimi).
  • Nuo 1 yra mažesnis, įdėkite 1 prieš 23 .
  • Surūšiuota dalis iki 1-oji indeksas yra: [1, 23]

Trečias leidimas:

Atnaujinkite sql su prisijungimu
  • Palyginti 10 su 1 ir 23 (dabartinis elementas su surūšiuota dalimi).
  • Nuo 10 yra didesnis nei 1 ir mažesnis nei 23 , Įdėti 10 tarp 1 ir 23 .
  • Surūšiuota dalis iki 2-oji indeksas yra: [1, 10, 23]

Ketvirtasis leidimas:

  • Palyginti 5 su 1 , 10 , ir 23 (dabartinis elementas su surūšiuota dalimi).
  • Nuo 5 yra didesnis nei 1 ir mažesnis nei 10 , Įdėti 5 tarp 1 ir 10 .
  • Surūšiuota dalis iki 3 indeksas yra : [1, 5, 10, 23]

Penktas leidimas:

  • Palyginti 2 su 1, 5, 10 , ir 23 (dabartinis elementas su surūšiuota dalimi).
  • Nuo 2 yra didesnis nei 1 ir mažesnis nei 5 Įdėti 2 tarp 1 ir 5 .
  • Surūšiuota dalis iki 4-oji indeksas yra: [1, 2, 5, 10, 23]

Galutinis masyvas:

  • Surūšiuotas masyvas yra toks: [1, 2, 5, 10, 23]
Rekomenduojamos praktikos įterpimo rūšiavimas Išbandykite!

Įterpimo rūšiavimo įgyvendinimas:

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]> klavišas) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = raktas;  } } // Naudingumo funkcija spausdinti n dydžio masyvą // void printArray(int arr[], int n) { int i;  už (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]> klavišas) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = raktas;  } } // Naudingumo funkcija, skirta spausdinti n dydžio masyvą void printArray(int arr[], int n) { int i;  už (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]> klavišas) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = raktas;  } } /* Naudingumo funkcija, skirta spausdinti n*/ dydžio masyvą static void printArray(int arr[]) { int n = arr.length;  už (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 ir raktas< 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]> raktas) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = raktas;  } } // Naudingumo funkcija spausdinti // n dydžio masyvas static void printArray(int[] arr) { int n = arr.Length;  už (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>>  
Išvestis Laiko sudėtingumas: O(N^2)
Pagalbinė erdvė: O(1)

Įterpimo rūšiavimo sudėtingumo analizė :

Įterpimo rūšiavimo sudėtingumas pagal laiką

  • Geriausias atvejis: O(n) , Jei sąrašas jau surūšiuotas, kur n yra elementų skaičius sąraše.
  • Vidutinis atvejis: O (n 2 ) , Jei sąrašas sudarytas atsitiktine tvarka
  • Blogiausiu atveju: O (n 2 ) , Jei sąrašas pateiktas atvirkštine tvarka

Erdvės sudėtingumas iš įterpimo rūšiavimo

  • Pagalbinė erdvė: O(1), reikalingas įterpimo rūšiavimas O(1) papildomos erdvės, todėl tai erdvėje taupantis rūšiavimo algoritmas.

Privalumai įterpimo rūšiavimas:

  • Paprasta ir lengva įgyvendinti.
  • Stabilus rūšiavimo algoritmas.
  • Veiksminga mažiems sąrašams ir beveik surūšiuotiems sąrašams.
  • Erdvės taupymas.

Trūkumai įterpimo rūšiavimas:

  • Neefektyvus dideliems sąrašams.
  • Daugeliu atvejų ne tokie veiksmingi kaip kiti rūšiavimo algoritmai (pvz., sujungimo rūšiavimas, greitas rūšiavimas).

Programos įterpimo rūšiavimas:

Įterpimo rūšiavimas dažniausiai naudojamas situacijose, kai:

  • Sąrašas mažas arba beveik surūšiuotas.
  • Svarbu paprastumas ir stabilumas.

Dažnai užduodami klausimai apie įterpimo rūšiavimą

Q1. Kokie yra įterpimo rūšiavimo algoritmo ribiniai atvejai?

tat pilna forma

Įterpimo rūšiavimas užtrunka daugiausiai laiko rūšiuoti, jei elementai rūšiuojami atvirkštine tvarka. Ir tai užtrunka mažiausiai laiko (n eilės tvarka), kai elementai jau yra surūšiuoti.

Q2. Kas yra įterpimo rūšiavimo algoritmo algoritminė paradigma?

Įterpimo rūšiavimo algoritmas yra laipsniškas.

Q3. Ar įterpimo rūšiavimas yra rūšiavimo vietoje algoritmas?

Taip, įterpimo rūšiavimas yra rūšiavimo vietoje algoritmas.

4 klausimas. Ar įterpimo rūšiavimas yra stabilus algoritmas?

sql serverio pivotas

Taip, įterpimo rūšiavimas yra stabilus rūšiavimo algoritmas.

Q5. Kada naudojamas įterpimo rūšiavimo algoritmas?

Įterpimo rūšiavimas naudojamas, kai elementų skaičius yra mažas. Tai taip pat gali būti naudinga, kai įvesties masyvas yra beveik surūšiuotas ir tik keli elementai yra netinkami visame dideliame masyve.