Tento článek popisuje 3 způsoby, jak sloučit řazení v c. Při slučovacím řazení je pole rekurzivně rozděleno na dvě části, tříděno a nakonec sloučeno.
Varianta řazení sloučení je považována za třícestné řazení, které rozděluje pole na tři části namísto rozdělení na dvě části. Sloučit řazení rekurzivně rozdělí pole na podpole poloviční velikosti. Podobně třícestné slučovací řazení rozloží pole na podpole o třetinové velikosti.
Při slučovacím řazení je pole rekurzivně rozděleno na dvě části, tříděno a nakonec sloučeno. Varianta slučovacího řazení se nazývá 3-way merge sort, kde místo rozdělení pole na dvě části rozdělí pole na tři části.
Příklady řazení sloučení: Příklad řazení sloučení je uveden níže -
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
Časová složitost třícestného slučovacího řazení je nlog3n.
Příklad 1: Zde uvádíme příklad 3 způsobů, jak sloučit řazení v c. Příklad je uveden níže -
#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)>
Jak funguje výše uvedený kód?
Zde nejprve zkopírujeme obsah pole statistik do každého druhého pole s názvem fArr. Poté zadejte pole umístěním středu, který rozděluje pole na tři prvky a volá charakteristiku typu na každém poli. Základní případ rekurze je, když má pole velikost 1 a je vráceno z funkce. Poté se spustí slučování pole a nakonec je setříděné pole ve fArr a zkopírováno do gArr.
Časová složitost řazení sloučení:
Třícestná rovnice sloučení je: T(n) = 2T(n/2) + O(n)
Podobně pro třícestné slučovací řazení máme: T( n) = 3T(n/3) + O(n)
Při řešení hlavní metodou je její složitost O(n log 3n).
Časová složitost se zdá být menší než u dvoucestného slučovacího řazení, ale čím více srovnání ve funkci sloučení, tím více času to může v praxi trvat.
V tomto článku tedy stručně probereme 3 způsoby, jak sloučit řazení v c. Varianta řazení sloučení je považována za třícestné řazení, které rozděluje pole na tři části namísto rozdělení na dvě části. Uvádíme také příklad, který s tímto tématem souvisí.