logo

Trosmjerno spajanje sortira u c

Ovaj članak govori o 3 načina spajanja sortiranja u c. Kod sortiranja spajanjem, niz se rekurzivno dijeli na dva dijela, sortira i na kraju spaja.

Varijanta sortiranja spajanjem tretira se kao trosmjerno sortiranje spajanjem koje dijeli niz na tri dijela umjesto da ga dijeli na dva dijela. Sortiranje spajanjem rekurzivno dijeli niz u podnizove polovične veličine. Slično, trosmjerno sortiranje spajanjem rastavlja niz u podnizove veličine jedne trećine.

Kod sortiranja spajanjem, niz se rekurzivno dijeli na dva dijela, sortira i na kraju spaja. Varijanta sortiranja spajanjem naziva se trosmjerno sortiranje spajanjem, gdje umjesto dijeljenja niza na dva dijela, on ga dijeli na tri dijela.

Primjeri sortiranja spajanjem: Primjer sortiranja spajanjem dan je u nastavku -

 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 

Vremenska složenost trosmjernog sortiranja spajanjem je nlog3n.

Primjer 1: Ovdje dajemo primjer 3 načina sortiranja spajanjem u c. Primjer je dat u nastavku -

 #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 radi gornji kod?

Ovdje prvo repliciramo sadržaj niza statistike u svaki drugi niz pod nazivom fArr. Zatim upišite niz lociranjem središnje točke koja dijeli niz na tri elementa i poziva karakteristiku tipa za svaki niz. Osnovni slučaj rekurzije je kada niz ima veličinu 1 i vraća ga funkcija. Zatim počinje spajanje niza, i konačno, sortirani niz je u fArr i kopiran u gArr.

Vremenska složenost sortiranja spajanjem:

Trosmjerna jednadžba sortiranja spajanjem je: T(n) = 2T(n/2) + O(n)

Slično, za trosmjerno sortiranje spajanjem imamo: T(n) = 3T(n/3) + O(n)

Rješavanje master metodom, složenost je O(n log 3n).

Čini se da je vremenska složenost manja od dvosmjernog sortiranja spajanjem, ali što je više usporedbi u funkciji spajanja, to bi moglo trajati više vremena u praksi.

Dakle, u ovom članku ukratko raspravljamo o 3 načina za spajanje sortiranja u c. Varijanta sortiranja spajanjem tretira se kao trosmjerno sortiranje spajanjem koje dijeli niz na tri dijela umjesto da ga dijeli na dva dijela. Dajemo i primjer koji je vezan uz ovu temu.