logo

3 krypčių sujungimo rūšiavimas c

Šiame straipsnyje aptariami 3 būdai, kaip sujungti rūšiavimą c. Sujungus rūšiavimą, masyvas rekursyviai padalijamas į dvi dalis, surūšiuojamas ir galiausiai sujungiamas.

Sujungimo rūšiavimo variantas traktuojamas kaip 3 krypčių sujungimo rūšiavimas, kuris padalija masyvą į tris dalis, o ne padalija į dvi dalis. Sujungimo rūšiavimas rekursyviai padalija masyvą į pusės dydžio pogrupius. Panašiai, trijų krypčių sujungimo rūšiavimas išskaido masyvą į trečdalio dydžio pogrupius.

Sujungus rūšiavimą, masyvas rekursyviai padalijamas į dvi dalis, surūšiuojamas ir galiausiai sujungiamas. Sujungimo rūšiavimo variantas vadinamas 3 krypčių sujungimo rūšiavimu, kai jis, užuot padalinęs masyvą į dvi dalis, padalija jį į tris dalis.

Sujungimo rūšiavimo pavyzdžiai: Sujungimo rūšiavimo pavyzdys pateiktas žemiau -

 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 

Trijų krypčių sujungimo rūšiavimo laiko sudėtingumas yra nlog3n.

1 pavyzdys: Čia pateikiame 3 būdų, kaip sujungti rūšiavimą c, pavyzdį. Pavyzdys pateiktas žemiau -

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

Kaip veikia aukščiau pateiktas kodas?

Čia pirmiausia pakartojame statistikos masyvo turinį į kiekvieną kitą masyvą, vadinamą fArr. Tada įveskite masyvą surasdami vidurio tašką, kuris padalija masyvą į tris elementus ir iškviečia kiekvieno masyvo tipo charakteristiką. Pagrindinis rekursijos atvejis yra tada, kai masyvo dydis yra 1 ir jis yra grąžinamas iš funkcijos. Tada prasideda masyvo sujungimas ir galiausiai surūšiuotas masyvas yra fArr ir nukopijuotas į gArr.

Sujungimo rūšiavimo sudėtingumas pagal laiką:

Trijų krypčių sujungimo rūšiavimo lygtis yra: T(n) = 2T(n/2) + O(n)

Panašiai trijų krypčių sujungimo rūšiavimui turime: T(n) = 3T(n/3) + O(n)

Sprendžiant pagrindiniu metodu, jo sudėtingumas O(n log 3n).

Laiko sudėtingumas atrodo mažesnis nei dviejų krypčių sujungimo rūšiavimas, bet kuo daugiau palyginimų sujungimo funkcijoje, tuo daugiau laiko tai gali užtrukti praktiškai.

Taigi, šiame straipsnyje trumpai aptariame 3 būdus, kaip sujungti rūšiavimą c. Sujungimo rūšiavimo variantas traktuojamas kaip 3 krypčių sujungimo rūšiavimas, kuris padalija masyvą į tris dalis, o ne padalija į dvi dalis. Taip pat pateikiame pavyzdį, susijusį su šia tema.