Bonjour, j'essaye d'écrire un tri fusion pour un tableau de String mais il semble il y avoir des erreurs que je n'arrive pas à trouver.
Pour autant ma fonction fusion à l'air de plutôt bien marcher mais dès que j'appelle la fonction tri_fusion certains mots de mon tableau se répètent et d'autres sont supprimé.
Si quelqu'un peux m'éclairer ce serait sympa !
Merci d'avance !
Code:public static String[] fusion (String[] tab, int deb, int m, int f) { String[] tab_g = new String[m - deb + 1]; // initialition des tableaux droite et gauche String[] tab_d = new String[f - m + 1]; for (int i = 0; i < tab_g.length; i++) { // copie de la partie gauche du tableau tab_g[i] = tab[i]; } tab_g[tab_g.length-1] = "STOP"; // création d'une sentinelle int g = 0; for (int i = m; i < f; i++) { // copie de la partie de droite du tableau tab_d[g] = tab[i]; g++; } tab_d[tab_d.length - 1] = "STOP"; // création d'une sentinelle int i = 0; int j = 0; int s = 0; for (int k = 0; k < tab.length &&(j != tab_d.length-1 || i != tab_g.length-1); k++) { // boucle qui réunit les deux tableaux if (s == 0) { if ((tab_g[i].equalsIgnoreCase("STOP")) == true) { s = 1; } if ((tab_d[j].equalsIgnoreCase("STOP")) == true) { s = 2; } if (tab_g[i].compareTo(tab_d[j]) <= 0 && s == 0) { tab[k] = tab_g[i]; i++; } else if (s == 0) { tab[k] = tab_d[j]; j++; } } if (s == 1 && j != tab_d.length-1) { tab[k] = tab_d[j]; j++; } else if (s == 2 && i != tab_g.length-1) { tab[k] = tab_g[i]; i++; } } return tab; } public static String[] tri_fusion (String[] tab, int deb, int f) { if (f<=deb) { return tab; } else { int milieu = deb+(f-deb)/2; tri_fusion(tab,deb,milieu); tri_fusion(tab, milieu+1,f); return fusion(tab, deb, milieu,f); } }
-----