logo

3-vejs flette sorter i c

Denne artikel diskuterer 3 måder at flette sortering i c. I flettesortering opdeles arrayet rekursivt i to dele, sorteres og til sidst flettes.

Fletsorteringsvarianten behandles som en 3-vejs flettesortering, der opdeler arrayet i tre dele i stedet for at opdele det i to dele. Merge sort opdeler rekursivt en matrix i halvstore subarrays. På samme måde dekomponerer en tre-vejs flettesortering et array i underarrays på en tredjedel af størrelsen.

I flettesortering opdeles arrayet rekursivt i to dele, sorteres og til sidst flettes. En variant af flettesortering kaldes 3-vejs flettesortering, hvor han i stedet for at opdele arrayet i to dele opdeler det i tre dele.

Eksempler på flettesorteringen: Eksemplet på flettesortering er givet 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 af ​​en tre-vejs flettesortering er nlog3n.

Eksempel 1: Her giver vi et eksempel på 3 måder at flette sortering i c. Eksemplet er givet 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 virker ovenstående kode?

Her kopierer vi først indholdet af statistik-arrayet til hver anden matrix kaldet fArr. Indtast derefter arrayet ved at lokalisere midtpunktet, der deler arrayet i tre elementer og kalder typekarakteristikken på hvert array. Det grundlæggende tilfælde af rekursion er, når et array har størrelse 1 og returneres fra en funktion. Derefter starter array-sammenfletningen, og til sidst er det sorterede array i fArr og kopieret til gArr.

Tidskompleksiteten af ​​flettesorteringen:

Tre-vejs flettesorteringsligning er: T(n) = 2T(n/2) + O(n)

Tilsvarende har vi for en tre-vejs flettesortering: T( n) = 3T(n/3) + O(n)

Løsning med mastermetoden er dens kompleksitet O(n log 3n).

Tidskompleksitet forekommer mindre end en to-vejs flettesortering, men jo flere sammenligninger i flettefunktionen, jo mere tid kan det tage i praksis.

Så i denne artikel diskuterer vi kort 3 måder at flette sortering i c. Fletsorteringsvarianten behandles som en 3-vejs flettesortering, der opdeler arrayet i tre dele i stedet for at opdele det i to dele. Vi giver også et eksempel, der er relateret til dette emne.