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:
Inserimento pratico consigliato Ordina Provalo!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 1° 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 2° 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 3° 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 4° l'indice è: [1, 2, 5, 10, 23]
Array finale:
- L'array ordinato è: [1, 2, 5, 10, 23]
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.