logo

3-veis flette sortering i c

Denne artikkelen diskuterer 3 måter å slå sammen sortering i c. I merge sort blir matrisen rekursivt delt i to deler, sortert og til slutt slått sammen.

Varianten av flettesorteringen behandles som en 3-veis flettesortering som deler arrayet i tre deler i stedet for å dele det i to deler. Sammenslåingssortering deler rekursivt en matrise i halvstore undermatriser. På samme måte dekomponerer en treveis sammenslåingssortering en matrise til undermatriser på en tredjedel av størrelsen.

I merge sort blir matrisen rekursivt delt i to deler, sortert og til slutt slått sammen. En variant av flettesortering kalles 3-veis flettesortering, hvor han i stedet for å dele opp arrayen i to deler deler den i tre deler.

Eksempler på sammenslåingssortering: Eksemplet på sammenslåingssortering er gitt nedenfor -

 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 

Tidskompleksiteten til en treveis flettesortering er nlog3n.

Eksempel 1: Her gir vi et eksempel på 3 måter å slå sammen sortering i c. Eksemplet er gitt nedenfor -

 #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)>

Hvordan fungerer koden ovenfor?

Her kopierer vi først innholdet i statistikkmatrisen til annenhver matrise kalt fArr. Skriv deretter matrisen ved å finne midtpunktet som deler matrisen i tre elementer og kaller typekarakteristikken på hver matrise. Det grunnleggende tilfellet av rekursjon er når en matrise har størrelse 1 og returneres fra en funksjon. Deretter starter array-sammenslåingen, og til slutt er den sorterte arrayen i fArr og kopiert til gArr.

Tidskompleksiteten til sammenslåingssorten:

Treveis flettesorteringsligning er: T(n) = 2T(n/2) + O(n)

Tilsvarende, for en treveis sammenslåingssortering, har vi: T( n) = 3T(n/3) + O(n)

Ved å løse med mastermetoden er kompleksiteten O(n log 3n).

Tidskompleksitet ser ut til å være mindre enn en toveis flettesortering, men jo flere sammenligninger i flettefunksjonen, desto mer tid kan det ta i praksis.

Så i denne artikkelen diskuterer vi kort 3 måter å slå sammen sortering i c. Varianten av flettesorteringen behandles som en 3-veis flettesortering som deler arrayet i tre deler i stedet for å dele det i to deler. Vi gir også et eksempel som er relatert til dette temaet.