logo

Ordinamento per inserimento: esercitazioni sulla struttura dei dati e sugli algoritmi

Ordinamento di inserimento è un semplice algoritmo di ordinamento che funziona inserendo in modo iterativo ogni elemento di un elenco non ordinato nella sua posizione corretta in una porzione ordinata dell'elenco. È un ordinamento stabile algoritmo, il che significa che gli elementi con valori uguali mantengono il loro ordine relativo nell'output ordinato.

Ordinamento di inserimento è come ordinare le carte da gioco che hai in mano. Dividi le carte in due gruppi: le carte ordinate e le carte non ordinate. Quindi, scegli una carta dal gruppo non ordinato e la metti al posto giusto nel gruppo ordinato.



Algoritmo di ordinamento per inserimento:

Ordinamento di inserimento è un semplice algoritmo di ordinamento che funziona costruendo un array ordinato un elemento alla volta. È considerato un a posto algoritmo di ordinamento, il che significa che non richiede spazio di memoria aggiuntivo oltre all'array originale.

Algoritmo:

Per ottenere l'ordinamento per inserzione, attenersi alla seguente procedura:



comandi di Linux
  • Dobbiamo iniziare con il secondo elemento dell'array poiché si presume che il primo elemento dell'array sia ordinato.
  • Confronta il secondo elemento con il primo elemento e controlla se il secondo elemento è più piccolo, quindi scambiali.
  • Passa al terzo elemento e confrontalo con il secondo elemento, poi con il primo elemento e scambialo se necessario per metterlo nella posizione corretta tra i primi tre elementi.
  • Continua questo processo, confrontando ogni elemento con quelli precedenti e scambiandolo secondo necessità per posizionarlo nella posizione corretta tra gli elementi ordinati.
  • Ripetere fino a quando l'intero array non viene ordinato.

Funzionamento dell'algoritmo di ordinamento per inserimento:

Considera un array con elementi : {23, 1, 10, 5, 2}

Primo passaggio:



  • L'elemento corrente è 23
  • Si presuppone che il primo elemento dell'array sia ordinato.
  • La parte ordinata fino a 0 l'indice è: [23]

Secondo passaggio:

  • Confrontare 1 con 23 (elemento corrente con la parte ordinata).
  • Da 1 è più piccolo, inserisci 1 Prima 23 .
  • La parte ordinata fino a l'indice è: [1, 23]

Terzo passaggio:

lattice di simboli di derivata parziale
  • Confrontare 10 con 1 E 23 (elemento corrente con la parte ordinata).
  • Da 10 è più grande di 1 e più piccolo di 23 , inserire 10 fra 1 E 23 .
  • La parte ordinata fino a l'indice è: [1, 10, 23]

Quarto passaggio:

  • Confrontare 5 con 1 , 10 , E 23 (elemento corrente con la parte ordinata).
  • Da 5 è più grande di 1 e più piccolo di 10 , inserire 5 fra 1 E 10 .
  • La parte ordinata fino a l'indice è : [1, 5, 10, 23]

Quinto passaggio:

come convertire un carattere in una stringa
  • Confrontare 2 con 1, 5, 10 , E 23 (elemento corrente con la parte ordinata).
  • Da 2 è più grande di 1 e più piccolo di 5 inserire 2 fra 1 E 5 .
  • La parte ordinata fino a l'indice è: [1, 2, 5, 10, 23]

Array finale:

  • L'array ordinato è: [1, 2, 5, 10, 23]
Inserimento pratico consigliato Ordina Provalo!

Implementazione dell'ordinamento per inserzione:

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]> tasto) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = chiave;  } } // Una funzione di utilità per stampare un array // di dimensione n void printArray(int arr[], int n) { int i;  per (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]> tasto) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = chiave;  } } // Una funzione di utilità per stampare un array di dimensione n void printArray(int arr[], int n) { int i;  per (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; }>
Giava
// 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]> tasto) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = chiave;  } } /* Una funzione di utilità per stampare un array di dimensione 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. */>
Pitone
# 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 e chiave< 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]> tasto) { arr[j + 1] = arr[j];  j = j - 1;  } arr[j + 1] = chiave;  } } // Una funzione di utilità per stampare // un array di dimensione 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]> $chiave) { $arr[$j + 1] = $arr[$j]; $j = $j - 1; } $arr[$j + 1] = $chiave; } } // Una funzione di utilità per // stampare un array di dimensione 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. ?>>

Produzione
5 6 11 12 13>

Complessità temporale: O(N^2)
Spazio ausiliario: O(1)

Analisi della complessità dell'ordinamento per inserzione :

Complessità temporale dell'ordinamento di inserimento

  • Caso migliore: SU) , Se l'elenco è già ordinato, dove n è il numero di elementi nell'elenco.
  • Caso medio: SU 2 ) , Se l'elenco è ordinato in modo casuale
  • Caso peggiore: SU 2 ) , Se l'elenco è in ordine inverso

Complessità spaziale dell'ordinamento di inserimento

  • Spazio ausiliario: O(1), richiede l'ordinamento per inserzione O(1) spazio aggiuntivo, rendendolo un algoritmo di ordinamento efficiente in termini di spazio.

Vantaggi dell'ordinamento di inserimento:

  • Semplice e facile da implementare.
  • Algoritmo di ordinamento stabile.
  • Efficiente per elenchi piccoli ed elenchi quasi ordinati.
  • Efficace in termini di spazio.

Svantaggi dell'ordinamento di inserimento:

  • Inefficiente per elenchi di grandi dimensioni.
  • Nella maggior parte dei casi non è efficiente come altri algoritmi di ordinamento (ad esempio, ordinamento in unione, ordinamento rapido).

Applicazioni dell'ordinamento di inserimento:

L'ordinamento per inserzione viene comunemente utilizzato nelle situazioni in cui:

  • L'elenco è piccolo o quasi ordinato.
  • La semplicità e la stabilità sono importanti.

Domande frequenti sull'ordinamento per inserimento

Q1. Quali sono i casi al contorno dell'algoritmo di ordinamento per inserimento?

L'ordinamento per inserimento richiede il tempo massimo per l'ordinamento se gli elementi vengono ordinati in ordine inverso. E ci vuole un tempo minimo (ordine di n) quando gli elementi sono già ordinati.

Q2. Qual è il paradigma algoritmico dell'algoritmo Insertion Sort?

L'algoritmo di ordinamento di inserimento segue un approccio incrementale.

Q3. Insertion Sort è un algoritmo di ordinamento sul posto?

Java contiene una sottostringa

Sì, l'ordinamento per inserzione è un algoritmo di ordinamento sul posto.

Q4. L'Insertion Sort è un algoritmo stabile?

Sì, l'ordinamento per inserzione è un algoritmo di ordinamento stabile.

Q5. Quando viene utilizzato l'algoritmo di ordinamento di inserimento?

inferno di richiamata in javascript

L'ordinamento per inserimento viene utilizzato quando il numero di elementi è piccolo. Può anche essere utile quando l'array di input è quasi ordinato e solo pochi elementi sono fuori posto in un array di grandi dimensioni completo.