static void triFusion(Object[] t) {
Object[] copie = (Object[])t.clone();
triFusion(copie, t, 0, t.length);
}
static void triFusion(Object source[], Object destination[],
int début, int fin) {
int longueur = fin - début;
if (longueur <= 1) return;
else {
int milieu = (début + fin)/2;
triFusion(destination, source, début, milieu);
// source est trié de début à milieu
triFusion(destination, source, milieu, fin);
// source est trié de milieu à fin
// Fusion des tableaux triés dans destination
for (int i = début, p = début, q = milieu;
i < fin;
i++) {
if (q>=fin || p<milieu &&
((Comparable)source[p]).compareTo(source[q])<=0) {
destination[i] = source[p];
p++;
} else {
destination[i] = source[q];
q++;
}
}
// destination est trié de debut à fin
}
}
Outre sa complexité en
,
le tri par fusion a l'avantage
d'être stable, c'est-à-dire que des éléments de même clé ne sont pas
échangés. Ceci permet de trier successivement un tableau selon plusieurs
clés et de conserver l'ordre obtenu lors des tris précédents.