shell sort c with examples
Technika sortowania powłoki w C ++: kompletny przegląd.
Sortowanie powłoki jest często określane jako ulepszenie w stosunku do sortowania przez wstawianie. W przypadku sortowania przez wstawianie zwiększamy o 1, aby porównać elementy i umieścić je we właściwej pozycji.
W przypadku sortowania przez powłokę lista jest sortowana przez podzielenie jej na kilka mniejszych podlist. Nie jest konieczne, aby listy zawierały ciągłe elementy. Zamiast tego, technika sortowania powłoki wykorzystuje inkrementację i, która jest również nazywana „przerwą” i używa jej do utworzenia listy elementów, które są oddalone od siebie o elementy „i”.
=> Zobacz tutaj, aby poznać pełną listę samouczków języka C ++.
jak dodać ciąg do tablicy ciągów
Czego się nauczysz:
Algorytm ogólny
Ogólny algorytm sortowania powłoki jest podany poniżej.
shell_sort (A, N)
gdzie A - lista do posortowania; N - gap_size
ustaw gap_size = N, flag = 1
podczas gdy gap_size> 1 lub flag = 1, powtórz
zaczynać
ustaw flagę = 0
ustaw gap_size = (gap_size + 1) / 2
koniec
dla i = 0 do i<(N-gap_size) repeat
zaczynać
jeśli A (i + gap_size)> A (i)
zamień A (i + gap_size), A (i)
ustaw flagę = 0
koniec
koniec
Dlatego w powyższym algorytmie najpierw ustawiliśmy N, które jest luką do sortowania tablicy A przy użyciu sortowania powłoki. W następnym kroku dzielimy tablicę na pod-tablice za pomocą odstępu. Następnie w kolejnym kroku sortujemy każdą z pod-tablic tak, aby na końcu pętli otrzymaliśmy posortowaną tablicę.
Następnie rozważmy szczegółowy przykład, aby lepiej zrozumieć sortowanie powłoki za pomocą reprezentacji graficznej.
Ilustracja
Zilustrujmy sortowanie powłoki na przykładzie.
Rozważ następującą tablicę 10 elementów.
Jeśli podamy przerwę 3, będziemy mieć następujące listy podrzędne z każdym elementem, który jest oddalony o 3 elementy. Następnie sortujemy te trzy podlisty.
Posortowane podlisty i wynikowa lista, którą otrzymujemy po połączeniu trzech posortowanych podlist, są pokazane poniżej.
Powyższa tablica, którą otrzymaliśmy po scaleniu posortowanych podtablic jest prawie posortowana. Teraz możemy przeprowadzić sortowanie przez wstawianie na tej liście i posortować całą tablicę. Ten ostatni krok jest pokazany poniżej w celach informacyjnych.
Jak widać powyżej, po wykonaniu sortowania powłoki i scaleniu posortowanych podlist potrzebowaliśmy tylko trzech ruchów, aby całkowicie posortować listę. W ten sposób widzimy, że możemy znacznie zmniejszyć liczbę kroków wymaganych do posortowania tablicy.
Wybór przyrostu do tworzenia list podrzędnych jest unikalną cechą sortowania powłoki.
Przykład w C ++
Zobaczmy poniżej implementację sortowania powłoki w 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 Wynik:
Tablica do posortowania:
45 23 53 43 18 24 8 95101
Tablica po sortowaniu powłoki:
8 18 23 24 43 45 53 95101
Użyliśmy tej samej listy, której użyliśmy na ilustracji i widzimy, że zaczynamy od utworzenia dwóch list podrzędnych, a następnie dalej zawężamy lukę. Po utworzeniu podlisty zgodnie z określoną luką sortujemy każdą z list podrzędnych. Po posortowaniu wszystkich list podrzędnych otrzymujemy listę prawie posortowaną. Teraz tę listę można posortować przy użyciu podstawowego sortowania przez wstawianie, które zajmie bardzo mało ruchów.
Następnie zaimplementujmy sortowanie powłoki w języku Java.
Przykład 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 Wynik:
Tablica do posortowania:
45 23 53 43 18 24 8 95101
Tablica po sortowaniu powłoki:
8 18 23 24 43 45 53 95101
Zaimplementowaliśmy tę samą logikę dla sortowania powłoki w programach C ++ i Java. Tak więc, jak wyjaśniono powyżej w programie Java, najpierw dzielimy tablicę na podtablice, a następnie sortujemy je, aby uzyskać kompletną posortowaną tablicę.
Wniosek
Sortowanie powłoki jest wysoce wydajnym algorytmem, który zapewnia ulepszenie w porównaniu z sortowaniem przez wstawianie.
Podczas gdy sortowanie przez wstawianie działa poprzez zwiększanie swoich elementów o 1, sortowanie przez powłokę używa parametru „gap”, aby podzielić tablicę na pod-tablice, których elementy są oddalone od siebie o „odstępy”. Następnie możemy posortować pojedynczą listę za pomocą sortowania przez wstawianie, aby uzyskać pełną posortowaną tablicę.
Sortowanie powłoki działa szybciej niż sortowanie przez wstawianie i wymaga mniej ruchów w celu sortowania tablicy w porównaniu z sortowaniem przez wstawianie. W naszym nadchodzącym samouczku omówimy wszystko o technice sortowania sterty do sortowania struktur danych.
=> Odwiedź tutaj, aby nauczyć się C ++ od podstaw.
rekomendowane lektury
- Wybór sortowania w C ++ z przykładami
- Metoda MongoDB Sort () z przykładami
- Polecenie sortowania systemu Unix ze składnią, opcjami i przykładami
- Sortuj bąbelkowe w C ++ z przykładami
- Sortuj przez wstawianie w C ++ z przykładami
- Sortuj w C ++ z przykładami
- Sortuj na stosie w C ++ z przykładami
- Szybkie sortowanie w C ++ z przykładami