logo

3-cestné zlúčenie triedenie v c

Tento článok popisuje 3 spôsoby, ako zlúčiť triedenie v c. Pri zlučovacom triedení je pole rekurzívne rozdelené na dve časti, triedené a nakoniec zlúčené.

Variant zoradenia zlúčením sa považuje za 3-smerné zoradenie zlúčením, ktoré rozdelí pole na tri časti namiesto rozdelenia na dve časti. Merge sort rekurzívne rozdeľuje pole na polovičné podpolia. Podobne trojcestné zlučovacie triedenie rozloží pole na podpolia s tretinovou veľkosťou.

Pri zlučovacom triedení je pole rekurzívne rozdelené na dve časti, triedené a nakoniec zlúčené. Variant zlučovacieho triedenia sa nazýva 3-way merge sort, kde namiesto rozdelenia poľa na dve časti ho rozdelí na tri časti.

Príklady zoradenia zlúčenia: Príklad zoradenia zlúčenia je uvedený nižšie -

 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á zložitosť triedenia trojcestného zlúčenia je nlog3n.

Príklad 1: Tu uvádzame príklad 3 spôsobov zlúčenia triedenia v c. Príklad je uvedený nižšie -

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

Ako funguje vyššie uvedený kód?

Tu najprv replikujeme obsah štatistického poľa do každého druhého poľa s názvom fArr. Potom zadajte pole umiestnením stredu, ktorý rozdeľuje pole na tri prvky a volá charakteristiku typu v každom poli. Základný prípad rekurzie je, keď má pole veľkosť 1 a je vrátené z funkcie. Potom sa spustí zlučovanie poľa a nakoniec je zoradené pole vo fArr a skopírované do gArr.

Časová zložitosť zoradenia zlúčenia:

Rovnica triedenia trojcestného zlúčenia je: T(n) = 2T(n/2) + O(n)

Podobne pre trojcestné zlučovacie triedenie máme: T( n) = 3T(n/3) + O(n)

Pri riešení master metódou je jej zložitosť O(n log 3n).

Časová zložitosť sa javí ako menšia ako pri dvojcestnom zlučovaní, ale čím viac porovnaní vo funkcii zlúčenia, tým viac času to môže v praxi trvať.

Takže v tomto článku stručne diskutujeme o 3 spôsoboch, ako zlúčiť triedenie v c. Variant zoradenia zlúčením sa považuje za 3-smerné zoradenie zlúčením, ktoré rozdelí pole na tri časti namiesto rozdelenia na dve časti. Uvádzame aj príklad, ktorý súvisí s touto témou.