logo

3 utas összevonási rendezés c

Ez a cikk a rendezés összevonásának 3 módját tárgyalja a c. Az összevont rendezésnél a tömb rekurzív módon két részre oszlik, rendeződik, és végül összevonja.

Az egyesített rendezési változatot a rendszer 3-utas egyesítési rendezésként kezeli, amely a tömböt három részre osztja ahelyett, hogy két részre osztaná fel. Az összevonási rendezés rekurzívan felosztja a tömböt fél méretű altömbökre. Hasonlóképpen, a háromutas egyesítési rendezés egy tömböt egyharmad méretű altömbökre bont.

Összevont rendezésnél a tömb rekurzív módon két részre oszlik, rendeződik, és végül összevonja. Az összevonási rendezés egyik változatát 3-utas összevonási rendezésnek nevezik, ahol ahelyett, hogy két részre osztaná a tömböt, három részre osztja.

Példák az egyesítésre: Az összevonási rendezés példája alább látható -

 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 

A háromutas összevonási rendezés időbeli összetettsége nlog3n.

1. példa: Itt mutatunk egy példát a rendezés összevonásának 3 módjára c. A példa alább látható -

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

Hogyan működik a fenti kód?

Itt először replikáljuk a statisztikai tömb tartalmát minden más fArr nevű tömbbe. Ezután írja be a tömböt úgy, hogy megkeresi azt a felezőpontot, amely három elemre osztja a tömböt, és minden tömbben meghívja a típusjellemzőt. A rekurzió alapesete az, amikor egy tömb mérete 1, és egy függvénytől kapjuk vissza. Ezután megkezdődik a tömb egyesítése, végül a rendezett tömb fArr-ba kerül, és a gArr-ba másolódik.

Az összevonási rendezés időbeli összetettsége:

A háromutas összevonási rendezési egyenlet: T(n) = 2T(n/2) + O(n)

Hasonlóképpen a háromutas összevonási rendezéshez a következőt kapjuk: T(n) = 3T(n/3) + O(n)

Mester módszerrel megoldva, bonyolultsága O(n log 3n).

Az időbonyolultság kisebbnek tűnik, mint a kétirányú egyesítési rendezés, de minél több összehasonlítás történik az összevonási függvényben, annál több időt vehet igénybe a gyakorlatban.

Tehát ebben a cikkben röviden megvitatjuk a rendezés egyesítésének 3 módját a c. Az egyesített rendezési változatot a rendszer 3-utas egyesítési rendezésként kezeli, amely a tömböt három részre osztja ahelyett, hogy két részre osztaná fel. Adunk egy példát is, amely ehhez a témához kapcsolódik.