Le tri est traditionnellement une tâche difficile en informatique . Le choix d'un algorithme de tri qui est efficace et rapide peut être difficile. Souvent , le choix de l'algorithme efficace implique la connaissance des données qui sont triées, et trie spécialisés travaillent habituellement beaucoup mieux que les algorithmes de tri généralisé . Cependant, certaines espèces , comme le " tri par fusion , " peuvent travailler dans des situations généralisées en brisant les jeux et le tri des petits morceaux de manière récursive. La liste Un tri par fusion est un " diviser pour régner " algorithme , en ce qu'elle prend des portions des listes et leur casse en permanence en deux moitiés jusqu'à atteindre les éléments uniques de la liste , qui sont ensuite fusionnées en commande. Par exemple, commencer avec une liste numérique comme 5 6 2 4 1 9 8 3 7 Photos Tri d'une liste comme celle-ci avec un tri par fusion , il faudra réduire de moitié la taille de la liste jusqu'à ce que chaque numéro de base seul existe . Ensuite, le tri peut comparer les chiffres et les mettre ensemble dans le bon ordre (plus bas au plus élevé, dans ce cas) . La fusion Méthode la méthode Merge est simple: def fusion (premier, deuxième ) Prendre deux listes , la méthode de les fusionner en commençant au début de chaque liste. Il ajoute ensuite la prochaine montant minimum de chaque liste dans une nouvelle liste . Le résultat est une liste triée. ( Rappelez-vous de bien insérer un espace blanc de tabulation après le " tout " et " if /else " énoncés . ) : Tout i < len ( premier ) et j < len ( seconde) : < p> si le premier [ i ] < = seconde [j] : new_list.append ( premier [i]) i = i + 1 autre : new_list.append ( deuxième [ j]) j = j + 1} Enfin, après une seule liste extrémités , les valeurs restantes sont placées dans la nouvelle liste : new_list + = premier [ i: ] new_list + = seconde [ j : ] retour end_list tri par fusion Conditions le tri par fusion réelle entraîne l' algorithme de tri principal . Il ya deux parties fonctionnelles principales : l'aspect conditionnel qui arrête la récursivité une fois que les listes sont divisées et la récursion réelle qui réduit de moitié les listes. L' état d'arrêt vient en premier : def mergesort ( liste): if len ( liste) == 1: retour Liste Cela garantit que quand une liste sous atteigne un seul élément , cet élément est retourné afin qu'il soit fusionné avec les autres numéros . Merge Trier récursivité La seconde moitié du le tri est la récursivité. Après le "if" /conditionnel , comme suit: autre : milieu = len ( liste) /2 start = mergesort ( liste [ milieu : ] ) Photos end = mergesort ( liste [: milieu ] ) retour fusion ( début, fin ) raison de récursivité, après que les listes sont divisées en éléments simples, l'algorithme pistes remonter à la dernière méthode exécutée . Donc , au moment où la déclaration «retour fusion ( début, fin ) " exécute , l'algorithme renvoie une fusion , une liste triée des deux listes triées , précédemment fusionnées de plus petite taille .
|