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.