logo

3-vägs sammanfoga sortera i c

Den här artikeln diskuterar tre sätt att slå samman sortering i c. I merge sort delas arrayen rekursivt i två delar, sorteras och sammanfogas slutligen.

Kombinationssorteringsvarianten behandlas som en 3-vägs sammanfogningssortering som delar upp arrayen i tre delar istället för att dela upp den i två delar. Merge sortering delar rekursivt upp en array i halvstora delarrayer. På liknande sätt bryter en trevägs sammanslagning upp en array i subarrayer av en tredjedel av storleken.

I merge sort delas arrayen rekursivt i två delar, sorteras och sammanfogas slutligen. En variant av merge sort kallas 3-way merge sort, där han istället för att dela upp arrayen i två delar delar upp den i tre delar.

Exempel på sammanslagningssorten: Exemplet på sammanslagningssortering ges nedan -

 Input: 4, 8, -4, -9, 10, 55, 46, 70, -56, 78, 90, 67, 85, 20, 29 Output: -56 -9 -4 4 8 10 20 29 46 55 67 70 78 85 90 Input: 98, -67 Output: -67 98 

Tidskomplexiteten för en trevägs sammanslagning är nlog3n.

Exempel 1: Här ger vi ett exempel på 3 sätt att slå samman sortering i c. Exemplet ges nedan -

 #include usingnamespacestd; voidmerge1(intgArr1[], intlow1, intmid1,intmid2, inthigh1, intdestArr1[]) { inti = low1, a = mid1, b = mid2, c = low1; while((i <mid1) 2 && (a < mid2) (b high1)) { if(garr1[i] garr1[j]) garr1[b]) destarr1[c++]="gArr1[i++];" } else else{ if(garr1[j] garr1[b]){ while((i mid1) mid2)){ garr1[a]){ while((a high1)){ if(garr1[a] while(i while(a while(b high) voidmergesort3wayrec(intgarr1[], intlow1, inthigh1, intdestarr1[]) if(high1 - low1 2) return; intmid1="low1" + ((high1 low1) 3); intmid2="low1" * 3) 1; mergesort3wayrec(destarr1, low1, mid1, garr1); mid2, high1, merge(destarr1, voidmergesort3way(intgarr1[], intn1){ if(n1="=" 0) intfarr1[n]; for(inti="0;" i n1; i++) farr1[i]="gArr1[i];" mergesort3wayrec(farray1, 0, n, garray1); garr1[i]="fArr1[i];" int main(){ intdata1[]="{4," 8, -4, -9, 10, 55, 46, 70, -56, 78, 90, 67, 85, 20, 29}; mergesort3way(data1,10); cout<< 'the result after the three way of merge sort is: '; 10; data1[i] << ' return0; pre> <p> <strong>Result:</strong> Now we compile the above program, and after successful compilation, we run it. Then the result is given below -</p> <pre> The result after the three way of merge sort is: -56 -9 -4 4 8 10 20 29 46 55 67 70 78 85 90 </pre> <h2>How does the above code work?</h2> <p>Here we first replica the contents of the statistics array into every other array called fArr. Then type the array by locating the midpoint that divides the array into three elements and calls the type characteristic on every array. The basic case of recursion is when an array has size 1 and is returned from a function. Then the array merging starts, and finally, the sorted array is in fArr and copied to gArr.</p> <h2>The time complexity of the merge sort:</h2> <p>Three-way merge sort equation is: T(n) = 2T(n/2) + O(n)</p> <p>Similarly, for a three-way merge sort, we have: T( n) = 3T(n/3) + O(n)</p> <p>Solving with the master method, its complexity is O(n log 3n).</p> <p>Time complexity appears less than a two-way merge sort, but the more comparisons in the merge function, the more time it might take in practice.</p> <p>So, in this article, we briefly discuss 3 ways to merge sort in c. The merge sort variant is treated as a 3-way merge sort that splits the array into three parts instead of splitting it into two parts. We also give an example that is related to this topic.</p> <hr></mid1)>

Hur fungerar ovanstående kod?

Här replikerar vi först innehållet i statistikmatrisen till varannan matris som kallas fArr. Skriv sedan arrayen genom att lokalisera mittpunkten som delar arrayen i tre element och anropar typkarakteristiken för varje array. Det grundläggande fallet med rekursion är när en array har storlek 1 och returneras från en funktion. Sedan startar sammanslagningen av arrayen, och slutligen är den sorterade arrayen i fArr och kopieras till gArr.

Tidskomplexiteten för sammanslagningssorten:

Trevägs sammanslagningssorteringsekvation är: T(n) = 2T(n/2) + O(n)

På liknande sätt, för en trevägs sammanslagningssortering, har vi: T( n) = 3T(n/3) + O(n)

Löser man med mastermetoden, dess komplexitet är O(n log 3n).

Tidskomplexitet verkar mindre än en tvåvägs sammanslagning, men ju fler jämförelser i sammanslagningsfunktionen, desto mer tid kan det ta i praktiken.

Så i den här artikeln diskuterar vi kortfattat 3 sätt att slå samman sortering i c. Kombinationssorteringsvarianten behandlas som en 3-vägs sammanfogningssortering som delar upp arrayen i tre delar istället för att dela upp den i två delar. Vi ger också ett exempel som är relaterat till detta ämne.