logo

Combinación de 3 vías en c

Este artículo analiza 3 formas de fusionar ordenación en c. En la clasificación por combinación, la matriz se divide recursivamente en dos partes, se clasifica y finalmente se fusiona.

La variante de ordenación por combinación se trata como una ordenación por combinación de 3 vías que divide la matriz en tres partes en lugar de dividirla en dos partes. La ordenación por combinación divide recursivamente una matriz en submatrices de tamaño medio. De manera similar, una ordenación por combinación de tres vías descompone una matriz en submatrices de un tercio del tamaño.

En la clasificación por combinación, la matriz se divide recursivamente en dos partes, se clasifica y finalmente se fusiona. Una variante de la ordenación por combinación se llama ordenación por combinación de 3 vías, donde en lugar de dividir la matriz en dos partes, la divide en tres partes.

Ejemplos de clasificación por combinación: El ejemplo de ordenación por combinación se proporciona a continuación:

 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 complejidad temporal de una clasificación por combinación de tres vías es nlog3n.

Ejemplo 1: Aquí, damos un ejemplo de 3 formas de ordenar por combinación en c. El ejemplo se da a continuación:

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

¿Cómo funciona el código anterior?

Aquí primero replicamos el contenido de la matriz de estadísticas en cualquier otra matriz llamada fArr. Luego escriba la matriz ubicando el punto medio que divide la matriz en tres elementos y llama a la característica de tipo en cada matriz. El caso básico de recursividad es cuando una matriz tiene tamaño 1 y es devuelta por una función. Luego comienza la fusión de la matriz y, finalmente, la matriz ordenada está en fArr y se copia en gArr.

La complejidad temporal del tipo de fusión:

La ecuación de clasificación por fusión de tres vías es: T(n) = 2T(n/2) + O(n)

De manera similar, para una clasificación por combinación de tres vías, tenemos: T( n) = 3T(n/3) + O(n)

Resolviendo con el método maestro, su complejidad es O(n log 3n).

La complejidad del tiempo parece menor que la de una clasificación de combinación bidireccional, pero cuantas más comparaciones haya en la función de combinación, más tiempo podría llevar en la práctica.

Entonces, en este artículo, analizamos brevemente 3 formas de fusionar ordenación en c. La variante de ordenación por combinación se trata como una ordenación por combinación de 3 vías que divide la matriz en tres partes en lugar de dividirla en dos partes. También damos un ejemplo que está relacionado con este tema.