Este artigo discute três maneiras de mesclar classificação em c. Na classificação por mesclagem, a matriz é dividida recursivamente em duas partes, classificada e finalmente mesclada.
A variante de classificação por mesclagem é tratada como uma classificação por mesclagem de três vias que divide a matriz em três partes, em vez de dividi-la em duas partes. A classificação por mesclagem divide recursivamente um array em submatrizes com metade do tamanho. Da mesma forma, uma classificação por mesclagem de três vias decompõe uma matriz em submatrizes de um terço do tamanho.
Na classificação por mesclagem, a matriz é dividida recursivamente em duas partes, classificada e finalmente mesclada. Uma variante da classificação por mesclagem é chamada classificação por mesclagem de 3 vias, onde, em vez de dividir o array em duas partes, ele o divide em três partes.
Exemplos de classificação por mesclagem: O exemplo de classificação por mesclagem é fornecido abaixo -
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
A complexidade de tempo de uma classificação por mesclagem de três vias é nlog3n.
Exemplo 1: Aqui, damos um exemplo de 3 maneiras de mesclar classificação em c. O exemplo é dado abaixo -
#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)>
Como funciona o código acima?
Aqui, primeiro replicamos o conteúdo do array de estatísticas em todos os outros arrays chamados fArr. Em seguida, digite o array localizando o ponto médio que divide o array em três elementos e chama a característica de tipo em cada array. O caso básico de recursão é quando um array tem tamanho 1 e é retornado de uma função. Em seguida, a fusão do array começa e, finalmente, o array classificado está em fArr e copiado para gArr.
A complexidade de tempo da classificação por mesclagem:
A equação de classificação por mesclagem de três vias é: T(n) = 2T(n/2) + O(n)
Da mesma forma, para uma classificação por mesclagem de três vias, temos: T(n) = 3T(n/3) + O(n)
Resolvendo com o método mestre, sua complexidade é O(n log 3n).
A complexidade do tempo parece menor do que uma classificação por mesclagem bidirecional, mas quanto mais comparações na função de mesclagem, mais tempo poderá levar na prática.
Portanto, neste artigo, discutimos brevemente três maneiras de mesclar classificação em c. A variante de classificação por mesclagem é tratada como uma classificação por mesclagem de três vias que divide a matriz em três partes, em vez de dividi-la em duas partes. Também damos um exemplo relacionado a este tópico.