Introduction au tri par fusion en Java

Le programme de tri par fusion en Java est l'un des algorithmes les plus largement utilisés et les plus efficaces. Le tri par fusion est basé sur une technique de division et de conquête qui implique de diviser un problème donné en plusieurs sous-problèmes et de résoudre chaque sous-problème indépendamment. Lorsque les sous-problèmes sont résolus, nous combinons leurs résultats pour obtenir la solution finale au problème. L'algorithme de tri par fusion peut être implémenté à l'aide de la récursivité car il implique de travailler avec des sous-problèmes plutôt qu'avec le problème principal.

Comment fonctionne le tri par fusion?

Considérons un tableau non trié qui doit être trié à l'aide de l'algorithme de tri par fusion. Voici les étapes impliquées dans le tri d'un tableau avec des valeurs: 18, 8, 4, 13, 10, 12, 7 et 11:

  • La première étape consiste à trouver un élément pivot sur la base duquel notre tableau d'entrée sera divisé en sous-réseaux.
  • Considérons que l'élément 13 est choisi comme pivot, par conséquent, le tableau d'origine sera divisé en deux sous-réseaux. Le premier sous-tableau contiendra 18, 8, 4, 13 et le second sous-tableau contiendra les éléments restants 10, 12, 7, 11.
  • Les sous-réseaux obtenus à l'étape 2 sont ensuite subdivisés comme à l'étape 1 et cela continue.
  • Une fois que le tableau principal est divisé en sous-réseaux avec des éléments uniques, nous recommençons à fusionner ces sous-réseaux de telle sorte que les éléments fusionnés soient triés.
  • Voici comment fonctionne la division et la conquête:

Programme de tri par fusion en Java

Voici un exemple de code montrant l'implémentation du tri par fusion en java:

Code:

package com.edubca.sorting;
public class MergeSort (
private int() array;
private int() tempMergedArr;
private int length;
public static void main(String a())(
int() inputArr = (18, 8, 4, 13, 10, 12, 7, 11);
MergeSort mergeSort = new MergeSort();
mergeSort.sort(inputArr);
for(int i:inputArr)(
System.out.print(i + " ");
)
)
public void sort(int inputArr()) (
this.array = inputArr;
this.length = inputArr.length;
this.tempMergedArr = new int(length);
performMergeSort(0, length - 1);
)
private void performMergeSort(int lowerIndex, int higherIndex) (
if (lowerIndex < higherIndex) (
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
// Sort the left side of the array call performMergeSort recursively
performMergeSort(lowerIndex, middle);
// Sort the right side of the array call performMergeSort recursively
performMergeSort(middle + 1, higherIndex);
// Merge subparts using a temporary array
mergeData(lowerIndex, middle, higherIndex);
)
)
private void mergeData (int lowerIndex, int middle, int higherIndex) (
for (int i = lowerIndex; i <= higherIndex; i++) (
tempMergedArr(i) = array(i);
)
int i = lowerIndex;
int j = middle + 1;
int k = lowerIndex;
while (i <= middle && j <= higherIndex) (
if (tempMergedArr(i) <= tempMergedArr(j)) (
array(k) = tempMergedArr(i);
i++;
) else (
array(k) = tempMergedArr(j);
j++;
)
k++;
)
while (i <= middle) (
array(k) = tempMergedArr(i);
k++;
i++;
)
)
)

Le code ci-dessus produira un tableau trié en sortie.

Production:

Quand devrions-nous utiliser le tri par fusion?

Le tri par fusion peut être utilisé dans les scénarios suivants:

  • Lorsque la structure de données à trier ne prend pas en charge l'accès aléatoire, le tri par fusion peut être utile et efficace.
  • Lorsqu'un niveau élevé de parallélisme est requis, le tri par fusion peut être utilisé car différents sous-problèmes peuvent être résolus indépendamment à l'aide de plusieurs processus exécutés en parallèle.
  • Le tri par fusion est plus rapide lorsque vous travaillez avec des listes liées, car les pointeurs peuvent facilement être modifiés lors de la fusion des listes.
  • Le tri par fusion peut être considéré comme un tri stable, ce qui signifie que le même élément d'un tableau conserve sa position d'origine les uns par rapport aux autres. Dans les cas où une stabilité élevée est requise, on peut opter pour le tri par fusion.

Analyse de complexité du tri par fusion

Ci-dessous l'analyse de la complexité du tri par fusion:

  • Le tri par fusion est un algorithme récursif et sa complexité temporelle est O (n * log n) dans les trois cas (pire, meilleur et moyen) car le tri par fusion divise le tableau en deux moitiés égales et prend un temps linéaire pour les fusionner.
  • La complexité spatiale du tri par fusion est O (n) car elle opère sur l'approche récursive. Par conséquent, le tri par fusion peut être considéré comme un algorithme rapide, efficace en termes d'espace et de temps.

Comparaison du tri par fusion avec d'autres algorithmes

Les points ci-dessous comparent le tri par fusion avec d'autres algorithmes:

  • Le tri en tas a la même complexité temporelle que le tri par fusion, mais il ne nécessite que O (1) espace auxiliaire au lieu du O (n) du tri par fusion. Par conséquent, le tri en tas est plus efficace en termes d'espace que le tri par fusion.
  • Les implémentations de tri rapide surpassent généralement le tri par fusion pour le tri des tableaux basés sur la RAM.
  • Le tri par fusion surpasse les algorithmes de tri rapide et de tri en tas lorsque vous travaillez avec la liste liée, car les pointeurs peuvent facilement être modifiés.

Programme de conclusion pour le tri par fusion en Java

De l'article, nous concluons que le tri par fusion est un concept important à comprendre en matière d'algorithmes.

Articles recommandés

Ceci est un guide du programme de tri par fusion en Java. Ici, nous discutons comment son travail, son utilisation, le programme de tri par fusion, etc. Vous pouvez également consulter nos autres articles connexes pour en savoir plus-

  1. Fusionner le tri en Java
  2. Fusionner les algorithmes de tri en Java
  3. Tri en tas en C
  4. Tri de tas en Java
  5. Outils de déploiement Java
  6. Tri de tas en Python
  7. Algorithmes de tri rapide en Java
  8. Top 6 des algorithmes de tri en JavaScript
  9. Les 6 meilleurs algorithmes de tri en Python