shell sort c with examples
Skalsorteringsteknik i C ++: En fullständig översikt.
Skalsortering kallas ofta som en förbättring jämfört med insättningssortering. I insättningssortering tar vi steg med 1 för att jämföra element och placera dem i rätt position.
I skalsortering sorteras listan genom att dela upp den i ett antal mindre underlistor. Det är inte nödvändigt att listorna måste ha sammanhängande element. I stället använder sig av skalsorteringstekniken inkrement i, som också kallas 'gap' och använder den för att skapa en lista med element som är 'i' -element isär.
=> Se här för att utforska listan med fullständiga C ++ -studier.
hur man lägger till element i en array-Java
Vad du kommer att lära dig:
Allmän algoritm
Den allmänna algoritmen för skalsortering ges nedan.
shell_sort (A, N)
där A - lista som ska sorteras; N - gap_storlek
ställa in gap_size = N, flagga = 1
medan gap_size> 1 eller flagga = 1, upprepa
Börja
ställa in flagga = 0
ställ in gap_size = (gap_size + 1) / 2
slutet
för i = 0 till i<(N-gap_size) repeat
Börja
om A (i + gap_storlek)> A (i)
byt A (i + gap_storlek), A (i)
ställa in flagga = 0
slutet
slutet
Således i ovanstående algoritm sätter vi först N som är klyftan för att sortera matrisen A med skalsortering. I nästa steg delar vi matrisen i undermatriser med hjälp av gapet. Sedan i nästa steg sorterar vi var och en av undermatriserna så att vi i slutet av slingan får en sorterad matris.
Låt oss sedan överväga ett detaljerat exempel för att bättre förstå skalsorteringen med hjälp av en bildrepresentation.
Illustration
Låt oss illustrera Shell-sorteringen med ett exempel.
Tänk på följande array med tio element.
Om vi ger ett mellanrum på 3, kommer vi att ha följande underlistor med varje element som är 3 element från varandra. Vi sorterar sedan dessa tre underlistor.
De sorterade underlistorna och den resulterande listan som vi får efter att ha kombinerat de tre sorterade underlistorna visas nedan.
Ovanstående array som vi har fått efter sammanslagning av de sorterade subarraysna är nästan sorterad. Nu kan vi utföra insättningssortering i den här listan och sortera hela matrisen. Det sista steget visas nedan för din referens.
Som vi har sett ovan, efter att ha utfört skalsortering och sammanfogade de sorterade underlistorna, krävde vi bara tre drag för att helt sortera listan. Således kan vi se att vi kan minska antalet steg som krävs för att sortera matrisen avsevärt.
Valet av steg för att skapa underlistor är en unik funktion för skalsortering.
C ++ Exempel
Låt oss se implementeringen av skalsortering i C ++ nedan.
#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 Produktion:
Array som ska sorteras:
45 23 53 43 18 24 8 95 101
Array after shell sort:
8 18 23 24 43 45 53 95 101
Vi har använt samma lista som vi använde i illustrationen och vi kan se att vi inledningsvis börjar med att skapa två underlistor och sedan minska klyftan ytterligare. När sublistor har skapats enligt det angivna gapet sorterar vi var och en av sublistorna. När alla underlistor är sorterade får vi den nästan sorterade listan. Nu kan den här listan sorteras med hjälp av den grundläggande insättningssorten som tar väldigt få drag.
Låt oss sedan implementera skalsortering med hjälp av Java-språk.
Java-exempel
// 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 Produktion:
Array som ska sorteras:
45 23 53 43 18 24 8 95 101
Array after shell sort:
8 18 23 24 43 45 53 95 101
Vi har implementerat samma logik för shell-sortering i både C ++ och Java-program. Således som förklarats ovan i Java-programmet delar vi först upp matrisen i undermatriser och sorterar dem sedan för att få en komplett sorterad matris.
Slutsats
Skalsortering är den mycket effektiva algoritmen som förbättras jämfört med insättningssorteringen.
Medan insättningssortering fungerar genom att öka dess element med 1, använder shell sort parametern 'gap' för att dela upp arrayen i underarrayer vars element är 'gap' från varandra. Sedan kan vi sortera den enskilda listan med hjälp av insättningssortering för att få hela den sorterade matrisen.
Skalsortering utför snabbare än insättningssortering och tar färre drag för att sortera matrisen jämfört med insättningssortering. Vår kommande handledning kommer att utforska allt om hopsorteringstekniken för att sortera datastrukturer.
=> Besök här för att lära dig C ++ från Scratch.
Rekommenderad läsning
- Urvalssortering i C ++ med exempel
- MongoDB Sort () -metod med exempel
- Unix Sortera kommando med syntax, alternativ och exempel
- Bubblesortering i C ++ med exempel
- Insättningssortering i C ++ med exempel
- Slå ihop sortering i C ++ med exempel
- Heapsortering i C ++ med exempel
- Snabb sortering i C ++ med exempel