def fusionner(tab, indice_Debut, indice_Partage, indice_Fin ) : tab1 = [tab[i] for i in range(indice_Debut, indice_Partage+1)] tab2 = [tab[i] for i in range(indice_Partage+1, indice_Fin+1)] i, j = 0, 0 for k in range( indice_Debut, indice_Fin+1 ) : if i >= len(tab1) or (j < len(tab2) and tab1[i] > tab2[j]) : tab[k] = tab2[j] j = j + 1 else : tab[k] = tab1[i] i = i + 1 def tri_fusion( tab, i_Debut = 0, i_Fin = None) : if i_Fin is None : i_Fin = len(tab) - 1 if i_Debut < i_Fin and i_Debut >=0 and i_Fin < len(tab) : indice_Partage = (i_Debut + i_Fin - 1) // 2 tri_fusion( tab, i_Debut, indice_Partage) tri_fusion( tab, indice_Partage + 1, i_Fin) fusionner( tab, i_Debut, indice_Partage, i_Fin )