logo

Tri par fusion à 3 voies en c

Cet article traite de 3 façons de fusionner le tri dans c. Lors du tri par fusion, le tableau est divisé de manière récursive en deux parties, trié et enfin fusionné.

La variante de tri par fusion est traitée comme un tri par fusion à trois voies qui divise le tableau en trois parties au lieu de le diviser en deux parties. Le tri par fusion divise de manière récursive un tableau en sous-tableaux de moitié. De même, un tri par fusion à trois décompose un tableau en sous-tableaux d'un tiers de la taille.

Lors du tri par fusion, le tableau est divisé de manière récursive en deux parties, trié et enfin fusionné. Une variante du tri par fusion est appelée tri par fusion à 3 voies, où au lieu de diviser le tableau en deux parties, il le divise en trois parties.

Exemples de tri par fusion : L'exemple de tri par fusion est donné ci-dessous -

 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 complexité temporelle d'un tri par fusion à trois voies est nlog3n.

Exemple 1: Ici, nous donnons un exemple de 3 façons de fusionner le tri en c. L'exemple est donné ci-dessous -

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

Comment fonctionne le code ci-dessus ?

Ici, nous répliquons d'abord le contenu du tableau de statistiques dans un autre tableau appelé fArr. Tapez ensuite le tableau en localisant le point médian qui divise le tableau en trois éléments et appelle la caractéristique de type sur chaque tableau. Le cas de base de la récursion est celui où un tableau a la taille 1 et est renvoyé par une fonction. Ensuite, la fusion des tableaux commence et enfin, le tableau trié est dans fArr et copié dans gArr.

La complexité temporelle du tri par fusion :

L'équation de tri par fusion à trois voies est : T(n) = 2T(n/2) + O(n)

De même, pour un tri par fusion à trois, nous avons : T( n) = 3T(n/3) + O(n)

En résolution avec la méthode principale, sa complexité est O(n log 3n).

La complexité temporelle semble moindre qu'un tri par fusion bidirectionnel, mais plus il y a de comparaisons dans la fonction de fusion, plus cela peut prendre du temps en pratique.

Ainsi, dans cet article, nous discutons brièvement de 3 façons de fusionner le tri en c. La variante de tri par fusion est traitée comme un tri par fusion à trois voies qui divise le tableau en trois parties au lieu de le diviser en deux parties. Nous donnons également un exemple lié à ce sujet.