Fusionner deux tableaux triés en Java
Fusionner deux tableaux triés en Java | Programmes de tableau en Java – 11 | Dans le programme Java précédent, nous avons développé des programmes pour fusionner deux tableaux en Java. Maintenant, dans cet article, nous verrons comment fusionner deux tableaux triés en Java.
Description du programme :- Écrivez un programme pour fusionner deux tableaux triés en un seul tableau trié en Java.
La fusion de deux tableaux en Java peut être effectuée en utilisant des méthodes prédéfinies, ou en utilisant des collections Java ou nous pouvons le faire manuellement en utilisant des boucles. Après la fusion, nous pouvons les trier, ou nous pouvons les trier lors de la fusion.
Exemple de fusion de deux tableaux int ,
Array1 =[10, 20, 30, 40, 50]
Array2 =[9, 18, 27, 36, 45]
Ensuite, le résultat doit être,
Fusionné Tableau =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]
Exemple de fusion de deux tableaux String ,
Array1 =[C++, Java, Python]
Array2 =[CSS, HTML, JavaScript]
Alors le résultat devrait être,
Merged Array =[C++, CSS, HTML , Java, Javascript, Python]
Différentes approches pour résoudre ce problème,
Méthode 1 : – Fusionnez d'abord les deux tableaux, puis triez le tableau résultant.
Méthode 2 : - Lors de la fusion des deux tableaux, attribuez les éléments dans un ordre trié.
Fusionner deux tableaux triés en Java à l'aide de Arrays.sort()
Dans cette méthode, fusionnez d'abord les deux tableaux avec le nouveau tableau, puis triez-les à l'aide de n'importe quel algorithme de tri. Dans le tri de deux tableaux en Java, nous avions discuté de différentes approches pour fusionner le tableau. Après les avoir fusionnés, nous utiliserons la méthode Arrays.sort() et la plupart du temps, elle offre de meilleures performances par rapport aux autres algorithmes de tri. Maintenant, démontrons-le à travers un exemple.
import java.util.Arrays;
public class CopyArray {
public static void main(String[] args) {
// array which should be merged
int src1[] = {10, 20, 30, 40, 50};
int src2[] = {9, 18, 27, 36, 45};
// create new array
int newArray[] = new int[src1.length + src2.length];
// Copy first to new array from 0 to src1.length
System.arraycopy(src1, 0, newArray, 0, src1.length);
// copy second array to new array
System.arraycopy(src2, 0, newArray, src1.length, src2.length);
// sort new array
Arrays.sort(newArray);
// display all array
System.out.println("Array1 = " + Arrays.toString(src1));
System.out.println("Array2 = " + Arrays.toString(src2));
System.out.println("Merged Array = "
+ Arrays.toString(newArray));
}
}
Sortie :-
Tableau1 =[10, 20, 30, 40, 50]
Tableau2 =[9, 18, 27, 36, 45]
Tableau fusionné =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]
Dans ce programme, pour afficher le tableau, nous avons utilisé la méthode toString() de la classe java.util.Arrays qui est donnée pour convertir le tableau en chaîne.
Méthode2
Dans cette méthode,
a) Supposons que les tableaux sont src1[]
, et src2[]
b) Créez un nouveau tableau (dest[]
) de la taille de src1.length + src2.length
c) Parcourez les deux tableaux, choisissez des éléments actuels plus petits dans src1[]
et src2[]
. Comparez l'élément actuel des deux tableaux, copiez le plus petit élément parmi eux à la position suivante dans dest[]
et avancez dans la destination[]
et le tableau dont l'élément est sélectionné.
d) S'il reste des éléments dans src1 ou src2, copiez-les dans dest[]
import java.util.Arrays;
public class CopyArray {
public static void main(String[] args) {
// array which should be merged
int src1[] = { 10, 20, 30, 40, 50 };
int src2[] = { 9, 18, 27, 36, 45 };
// resultant array
int newArray[] = mergeSort(src1, src2);
// display all array
System.out.println("Array1 = " + Arrays.toString(src1));
System.out.println("Array2 = " + Arrays.toString(src2));
System.out.println("Merged Array = "
+ Arrays.toString(newArray));
}
private static int[] mergeSort(int[] src1, int[] src2) {
// create new array
int merge[] = new int[src1.length + src2.length];
// variables
int i = 0, j = 0, k = 0;
// traverse both array
while (i < src1.length && j < src2.length) {
// Compare current element of both array.
// Store smaller element and
// increment index of that array
if (src1[i] < src2[j])
merge[k++] = src1[i++]; // first array
else
merge[k++] = src2[j++]; // second array
}
// Store remaining elements of first array
while (i < src1.length) {
merge[k++] = src1[i++];
}
// Store remaining elements of second array
while (j < src2.length) {
merge[k++] = src2[j++];
}
return merge;
}
}
Sortie :-
Tableau1 =[10, 20, 30, 40, 50]
Tableau2 =[9, 18, 27, 36, 45]
Tableau fusionné =[9, 10, 18, 20, 27, 30, 36, 40, 45, 50]