logo

3-smerno spajanje razvršča v c

Ta članek obravnava 3 načine za združevanje razvrščanja v c. Pri razvrščanju z zlivanjem je matrika rekurzivno razdeljena na dva dela, razvrščena in končno spojena.

Različica razvrščanja z združevanjem se obravnava kot 3-smerno razvrščanje z združevanjem, ki razdeli matriko na tri dele, namesto da bi jo razdelili na dva dela. Razvrščanje z združitvijo rekurzivno razdeli matriko na polovične podnize. Podobno trismerno razvrščanje z združitvijo razgradi matriko na podmatrike velikosti ene tretjine.

Pri razvrščanju z zlivanjem je matrika rekurzivno razdeljena na dva dela, razvrščena in končno spojena. Različica razvrščanja z združevanjem se imenuje 3-smerno razvrščanje z združevanjem, kjer namesto razdelitve matrike na dva dela, jo razdeli na tri dele.

Primeri razvrščanja z združitvijo: Spodaj je podan primer združevanja -

 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 

Časovna kompleksnost trosmernega razvrščanja z združevanjem je nlog3n.

Primer 1: Tukaj podajamo primer treh načinov razvrščanja z združevanjem v c. Primer je podan spodaj -

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

Kako deluje zgornja koda?

Tukaj najprej podvojimo vsebino statistične matrike v vsako drugo matriko, imenovano fArr. Nato vnesite matriko tako, da poiščete sredino, ki razdeli matriko na tri elemente in prikliče karakteristiko tipa za vsako matriko. Osnovni primer rekurzije je, ko ima matrika velikost 1 in je vrnjena iz funkcije. Nato se začne združevanje matrike in končno je razvrščena matrika v fArr in kopirana v gArr.

Časovna zapletenost razvrščanja z združitvijo:

Trismerna enačba razvrščanja z združevanjem je: T(n) = 2T(n/2) + O(n)

Podobno imamo za trosmerno razvrščanje z združevanjem: T( n) = 3T(n/3) + O(n)

Reševanje z glavno metodo, njena kompleksnost je O(n log 3n).

Zdi se, da je časovna zapletenost manjša kot pri dvosmernem spajanju, vendar več kot je primerjav v funkciji spajanja, več časa lahko traja v praksi.

Torej, v tem članku na kratko obravnavamo 3 načine za združevanje razvrščanja v c. Različica razvrščanja z združevanjem se obravnava kot 3-smerno razvrščanje z združevanjem, ki razdeli matriko na tri dele, namesto da bi jo razdelili na dva dela. Navajamo tudi primer, ki je povezan s to temo.