shell sort c with examples
Tècnica d'ordenació de shell a C ++: una visió general completa.
L’ordenació de shell sovint s’anomena una millora respecte a la classificació per inserció. A l’ordenació per inserció, prenem increments de 1 per comparar els elements i situar-los en la seva posició correcta.
En ordre de shell, la llista s'ordena dividint-la en diverses subllistes més petites. No cal que les llistes tinguin elements contigus. En lloc d'això, la tècnica de classificació de l'intèrpret d'ordres utilitza l'increment i, que també s'anomena 'buit' i l'utilitza per crear una llista d'elements separats per 'i'.
=> Vegeu aquí per explorar la llista completa de tutorials de C ++.
què és la prova de regressió a la prova de programari
Què aprendreu:
Algorisme general
A continuació es mostra l’algorisme general per a l’ordenació de shell.
shell_sort (A, N)
on s'ordena la llista A; N - mida_d’espai
defineix gap_size = N, flag = 1
mentre que gap_size> 1 o flag = 1, repetiu
començar
set flag = 0
defineix gap_size = (gap_size + 1) / 2
final
per a i = 0 a i<(N-gap_size) repeat
començar
si A [i + gap_size]> A [i]
intercanviar A [i + gap_size], A [i]
set flag = 0
final
final
Per tant, en l'algorisme anterior, primer establim N, que és el buit per ordenar la matriu A mitjançant un ordre de shell. Al següent pas, dividim la matriu en sub-matrius mitjançant l’espai. A continuació, al següent pas, ordenem cadascuna de les sub-matrius de manera que al final del bucle obtindrem una matriu ordenada.
A continuació, considerem un exemple detallat per entendre millor el tipus de petxina mitjançant una representació pictòrica.
Il·lustració
Il·lustrem el tipus Shell amb un exemple.
Penseu en la següent matriu de 10 elements.
Si proporcionem un buit de 3, tindrem les subllistes següents amb cada element que estigui separat per 3 elements. A continuació, classifiquem aquestes tres llistes.
Les subllistes ordenades i la llista resultant que obtenim després de combinar les tres llistes ordenades es mostren a continuació.
La matriu anterior que hem obtingut després de combinar els subarrays ordenats està gairebé ordenada. Ara podem realitzar una classificació per inserció en aquesta llista i ordenar tota la matriu. Aquest pas final es mostra a continuació com a referència.
Com es va veure més amunt, després de realitzar l'ordenació de l'intèrpret d'ordres i combinar les sublistes ordenades, només necessitàvem tres moviments per ordenar completament la llista. Per tant, podem veure que podem reduir significativament el nombre de passos necessaris per ordenar la matriu.
L'elecció de l'increment per crear sub-llistes és una característica única de la classificació de l'intèrpret d'ordres.
Exemple C ++
Vegem a continuació la implementació del tipus de shell a 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 Sortida:
Matriu per ordenar:
45 23 53 43 18 24 8 95.101
Matriu després de la classificació de shell:
8 18 23 24 43 45 53 95 101
Hem utilitzat la mateixa llista que hem utilitzat a la il·lustració i podem veure que inicialment comencem creant dues sub-llistes i després reduint encara més la bretxa. Un cop es creen les llistes secundàries segons l'espai especificat, ordenem cadascuna de les llistes secundàries. Després d'ordenar totes les subllistes, obtindrem la llista gairebé ordenada. Ara, aquesta llista es pot ordenar mitjançant l'ordenació d'inserció bàsica, que realitzarà molt pocs moviments.
A continuació, implementem la classificació de l'intèrpret d'ordres mitjançant un llenguatge Java.
Exemple de 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 Sortida:
Matriu per ordenar:
45 23 53 43 18 24 8 95.101
Matriu després de la classificació de shell:
8 18 23 24 43 45 53 95 101
Hem implementat la mateixa lògica per a la classificació de shell tant en programes C ++ com en Java. Així, tal com s'ha explicat anteriorment al programa Java, primer dividim la matriu en subarrays i després les ordenem per obtenir una matriu ordenada completa.
Conclusió
El tipus de Shell és l'algorisme altament eficient que millora el tipus d'inserció.
Mentre que la classificació per inserció funciona incrementant els seus elements en 1, la classificació de shell utilitza el paràmetre 'gap' per dividir la matriu en sub-matrius els elements dels quals estan separats per 'gap'. A continuació, podem ordenar la llista individual mitjançant la classificació per inserció per obtenir la matriu ordenada completa.
La classificació de shell funciona més ràpidament que la classificació per inserció i fa menys moviments per ordenar la matriu en comparació amb la classificació per inserció. El nostre proper tutorial explorarà tot sobre la tècnica d’ordenació en pila per ordenar les estructures de dades.
=> Visiteu aquí per aprendre C ++ des de zero.
Lectura recomanada
- Selecció Ordena en C ++ amb exemples
- MongoDB Sort () Mètode amb exemples
- Ordre d'ordenació Unix amb sintaxi, opcions i exemples
- Classificació de bombolles en C ++ amb exemples
- Ordre d'inserció a C ++ amb exemples
- Combina l’ordenació en C ++ amb exemples
- Ordena en pila en C ++ amb exemples
- Ordena ràpidament en C ++ amb exemples