shell sort c with examples
Tecnica di ordinamento della shell in C ++: una panoramica completa.
L'ordinamento della shell è spesso definito come un miglioramento rispetto all'ordinamento per inserzione. Nell'ordinamento per inserzione, prendiamo incrementi di 1 per confrontare gli elementi e metterli nella posizione corretta.
Nell'ordinamento della shell, l'elenco viene ordinato suddividendolo in un numero di sottoliste più piccole. Non è necessario che gli elenchi contengano elementi contigui. Invece, la tecnica di ordinamento della shell utilizza l'incremento i, che è anche chiamato 'gap' e lo utilizza per creare un elenco di elementi che sono elementi 'i' separati.
=> Vedi qui per esplorare l'elenco completo dei tutorial C ++.
tecniche di test white box con esempi
Cosa imparerai:
Algoritmo generale
Di seguito viene fornito l'algoritmo generale per l'ordinamento della shell.
shell_sort (A, N)
dove A - lista da ordinare; N - gap_size
impostare gap_size = N, flag = 1
mentre gap_size> 1 o flag = 1, ripeti
inizio
impostare flag = 0
imposta gap_size = (gap_size + 1) / 2
fine
per i = da 0 a i<(N-gap_size) repeat
inizio
se A (i + gap_size)> A (i)
scambia A (i + gap_size), A (i)
impostare flag = 0
fine
fine
Pertanto, nell'algoritmo precedente, impostiamo prima N che è il divario per l'ordinamento dell'array A utilizzando l'ordinamento della shell. Nel passaggio successivo, dividiamo l'array in sotto-array utilizzando lo spazio. Quindi, nel passaggio successivo, ordiniamo ciascuno dei sotto-array in modo che alla fine del ciclo otterremo un array ordinato.
Successivamente, consideriamo un esempio dettagliato per comprendere meglio l'ordinamento della shell utilizzando una rappresentazione pittorica.
Illustrazione
Illustriamo l'ordinamento della shell con un esempio.
Considera la seguente matrice di 10 elementi.
Se forniamo un intervallo di 3, avremo le seguenti sottoelenchi con ogni elemento che è a 3 elementi di distanza. Quindi selezioniamo queste tre sottoliste.
Di seguito vengono mostrati i sotto-elenchi ordinati e l'elenco risultante che otteniamo dopo aver combinato i tre elenchi secondari ordinati.
L'array precedente che abbiamo ottenuto dopo aver unito i sottoarray ordinati è quasi ordinato. Ora possiamo eseguire l'ordinamento per inserzione su questo elenco e ordinare l'intero array. Questo passaggio finale è mostrato di seguito come riferimento.
Come visto sopra, dopo aver eseguito l'ordinamento della shell e aver unito le sottoliste ordinate, abbiamo richiesto solo tre mosse per ordinare completamente l'elenco. Quindi possiamo vedere che possiamo ridurre significativamente il numero di passaggi necessari per ordinare l'array.
La scelta dell'incremento per creare sotto-elenchi è una caratteristica unica dell'ordinamento della shell.
Esempio C ++
Vediamo di seguito l'implementazione dell'ordinamento della shell in C ++.
#include using namespace std; // shellsort implementation int shellSort(int arr(), int N) { for (int gap = N/2; gap > 0; gap /= 2) { for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } int main() { int arr() = {45,23,53,43,18,24,8,95,101}, i; //Calculate size of array int N = sizeof(arr)/sizeof(arr(0)); cout << 'Array to be sorted:
'; for (int i=0; i Produzione:
Matrice da ordinare:
45 23 53 43 18 24 8 95101
Array dopo l'ordinamento della shell:
8 18 23 24 43 45 53 95101
Abbiamo usato lo stesso elenco che abbiamo usato nell'illustrazione e possiamo vedere che iniziamo inizialmente creando due sottoelenchi e poi riducendo ulteriormente il divario. Una volta che le sotto-liste sono state create secondo lo spazio specificato, ordiniamo ciascuna delle sotto-liste. Dopo che tutti gli elenchi secondari sono stati ordinati, otteniamo l'elenco quasi ordinato. Ora questo elenco può essere ordinato utilizzando l'ordinamento di inserimento di base che richiederà pochissime mosse.
Successivamente, implementiamo l'ordinamento della shell utilizzando il linguaggio Java.
Esempio Java
// Java class for ShellSort class ShellSort { //function to sort the array using shell sort int sort(int arr()) { int N = arr.length; // Start with a big gap, then narrow the gap for (int gap = N/2; gap > 0; gap /= 2) { //sort sub lists created by applying gap for (int i = gap; i = gap && arr(j - gap) > temp; j -= gap) arr(j) = arr(j - gap); arr(j) = temp; } } return 0; } } class Main{ public static void main(String args()) { int arr() = {45,23,53,43,18,24,8,95,101}; int N = arr.length; System.out.println('Array to be sorted: '); for (int i=0; i Produzione:
Matrice da ordinare:
45 23 53 43 18 24 8 95101
Array dopo l'ordinamento della shell:
8 18 23 24 43 45 53 95101
Abbiamo implementato la stessa logica per l'ordinamento della shell sia nei programmi C ++ che Java. Così, come spiegato sopra nel programma Java, prima dividiamo l'array in sottoarray e poi li ordiniamo per ottenere un array ordinato completo.
Conclusione
L'ordinamento della shell è l'algoritmo altamente efficiente che migliora l'ordinamento per inserzione.
Mentre l'ordinamento per inserzione funziona incrementando i suoi elementi di 1, l'ordinamento della shell utilizza il parametro 'gap' per dividere l'array in sotto-array i cui elementi sono 'gap' separati. Quindi possiamo ordinare l'elenco individuale utilizzando l'ordinamento per inserimento per ottenere l'array ordinato completo.
L'ordinamento della shell è più veloce dell'ordinamento per inserzione e richiede meno spostamenti per ordinare l'array rispetto all'ordinamento per inserzione. Il nostro prossimo tutorial esplorerà tutto sulla tecnica di ordinamento degli heap per l'ordinamento delle strutture di dati.
=> Visita qui per imparare C ++ da zero.
Lettura consigliata
- Ordinamento di selezione in C ++ con esempi
- Metodo MongoDB Sort () con esempi
- Comando di ordinamento Unix con sintassi, opzioni ed esempi
- Bubble Sort in C ++ con esempi
- Ordinamento di inserzione in C ++ con esempi
- Unisci ordinamento in C ++ con esempi
- Ordinamento heap in C ++ con esempi
- Ordinamento rapido in C ++ con esempi