logo

3-voudig samenvoegen sorteren in c

Dit artikel bespreekt 3 manieren om sortering samen te voegen in c. Bij merge sort wordt de array recursief in twee delen gesplitst, gesorteerd en uiteindelijk samengevoegd.

De samenvoegsorteervariant wordt behandeld als een driewegsamenvoegsortering waarbij de array in drie delen wordt gesplitst in plaats van in twee delen. Samenvoegsortering splitst een array recursief op in subarrays van halve grootte. Op dezelfde manier ontleedt een drieweg-samenvoegsortering een array in subarrays van een derde van de grootte.

Bij merge sort wordt de array recursief in twee delen gesplitst, gesorteerd en uiteindelijk samengevoegd. Een variant van merge sort wordt 3-way merge sort genoemd, waarbij hij in plaats van de array in twee delen te splitsen, deze in drie delen splitst.

Voorbeelden van de samenvoegsoort: Het voorbeeld van samenvoegsortering wordt hieronder gegeven -

 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 

De tijdscomplexiteit van een drieweg-samenvoegsoort is nlog3n.

Voorbeeld 1: Hier geven we een voorbeeld van drie manieren om sortering in c samen te voegen. Het voorbeeld wordt hieronder gegeven -

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

Hoe werkt de bovenstaande code?

Hier repliceren we eerst de inhoud van de statistische array naar elke andere array genaamd fArr. Typ vervolgens de array door het middelpunt te lokaliseren dat de array in drie elementen verdeelt en het typekenmerk voor elke array aanroept. Het basisgeval van recursie is wanneer een array grootte 1 heeft en wordt geretourneerd door een functie. Vervolgens begint het samenvoegen van de arrays en ten slotte bevindt de gesorteerde array zich in fArr en wordt deze gekopieerd naar gArr.

De tijdscomplexiteit van de samenvoegsoort:

Drievoudige samenvoegsorteervergelijking is: T(n) = 2T(n/2) + O(n)

Op dezelfde manier geldt voor een drievoudige samenvoegsoort: T( n) = 3T(n/3) + O(n)

Bij het oplossen met de mastermethode is de complexiteit O(n log 3n).

Tijdcomplexiteit lijkt minder dan een tweerichtings-samenvoegbewerking, maar hoe meer vergelijkingen er in de samenvoegfunctie zijn, hoe meer tijd het in de praktijk kan kosten.

Daarom bespreken we in dit artikel kort drie manieren om sortering in c samen te voegen. De samenvoegsorteervariant wordt behandeld als een driewegsamenvoegsortering waarbij de array in drie delen wordt gesplitst in plaats van in twee delen. We geven ook een voorbeeld dat verband houdt met dit onderwerp.