logo

Ordenació de fusió de 3 vies en c

Aquest article tracta 3 maneres de combinar l'ordenació a c. En l'ordenació per fusió, la matriu es divideix de forma recursiva en dues parts, s'ordena i finalment es fusiona.

La variant d'ordenació de combinació es tracta com una ordenació de combinació de 3 vies que divideix la matriu en tres parts en lloc de dividir-la en dues parts. L'ordenació combinada divideix de manera recursiva una matriu en subarrays de mida mitjana. De la mateixa manera, una ordenació de combinació de tres direccions descompon una matriu en subarrays d'un terç de la mida.

En l'ordenació per fusió, la matriu es divideix de forma recursiva en dues parts, s'ordena i finalment es fusiona. Una variant de l'ordenació de combinació s'anomena ordenació de combinació de 3 vies, on en lloc de dividir la matriu en dues parts, la divideix en tres parts.

Exemples de l'ordenació de combinació: L'exemple d'ordenació de combinació es mostra a continuació:

 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 

La complexitat temporal d'una ordenació de combinació de tres direccions és nlog3n.

Exemple 1: Aquí, donem un exemple de 3 maneres de combinar l'ordenació a c. L'exemple es presenta a continuació -

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

Com funciona el codi anterior?

Aquí primer reproduïm el contingut de la matriu d'estadístiques en qualsevol altra matriu anomenada fArr. A continuació, escriviu la matriu localitzant el punt mitjà que divideix la matriu en tres elements i crida la característica del tipus a cada matriu. El cas bàsic de recursivitat és quan una matriu té una mida 1 i es retorna des d'una funció. A continuació, s'inicia la fusió de la matriu i, finalment, la matriu ordenada està a fArr i es copia a gArr.

La complexitat temporal de l'ordenació de la fusió:

L'equació d'ordenació de fusió de tres vies és: T(n) = 2T(n/2) + O(n)

De la mateixa manera, per a una ordenació de fusió de tres direccions, tenim: T(n) = 3T(n/3) + O(n)

Resol amb el mètode mestre, la seva complexitat és O(n log 3n).

La complexitat del temps sembla menys que una combinació bidireccional, però com més comparacions es faci la funció de combinació, més temps pot trigar a la pràctica.

Per tant, en aquest article, parlem breument de 3 maneres de combinar l'ordenació a c. La variant d'ordenació de combinació es tracta com una ordenació de combinació de 3 vies que divideix la matriu en tres parts en lloc de dividir-la en dues parts. També posem un exemple relacionat amb aquest tema.