Maison développement back-end Tutoriel Python Introduction détaillée aux étapes d'implémentation de l'algorithme de tri par fusion en programmation Python

Introduction détaillée aux étapes d'implémentation de l'algorithme de tri par fusion en programmation Python

Mar 06, 2017 pm 01:27 PM

Idée de base : le tri par fusion est une idée typique de diviser pour régner, qui divise une liste non ordonnée en deux, puis divise à nouveau chaque sous-séquence en deux et continue jusqu'à ce qu'elle ne puisse plus être divisée. Ensuite, le processus de fusion commence, comparant les éléments de chaque sous-séquence avec une autre sous-séquence, et plaçant séquentiellement les petits éléments dans la séquence de résultats pour la fusion, et enfin en complétant le tri de fusion.

Processus d'opération de fusion :

Demander de l'espace pour que sa taille soit la somme des deux séquences triées. Cet espace est utilisé pour stocker la séquence fusionnée.
Définissez deux pointeurs, les positions initiales sont respectivement les positions de départ des deux séquences triées
Comparez les éléments pointés par les deux pointeurs, sélectionnez l'élément relativement petit et placez-le dans l'espace de fusion, puis déplacez le pointeur à la position suivante
Répétez l'étape 3 jusqu'à ce qu'un certain pointeur atteigne la fin de la séquence
Copiez tous les éléments restants de l'autre séquence directement à la fin de la séquence fusionnée
La déclaration ci-dessus est une déclaration théorique . Voici un exemple pratique pour illustrer :

Par exemple, un tableau non ordonné

[6,2,3,1,7]
Copier après la connexion

Décomposez d'abord le tableau de manière récursive jusqu'à :

[6],[2],[3],[1],[7]
Copier après la connexion

Ensuite, lancez le tri par fusion, également de manière récursive :

fusionnez et triez deux par deux, obtenez :

[2,6],[1,3],[7]
Copier après la connexion

Dans l'étape précédente, il a en fait été fusionné de la même manière que cette étape, mais comme il y a un numéro dans chaque liste, le processus ne peut pas être entièrement affiché. Le processus peut être entièrement illustré ci-dessous.

Initial :

 a = [2,6] b = [1,3] c = []
Copier après la connexion

Étape 1, retirez séquentiellement un numéro de a, b : 2, 1, comparez la taille et mettez-le Entrez c et supprimez le numéro de la liste d'origine Le résultat est :

a = [2,6] b = [3] c = [1]
Copier après la connexion

Étape 2, continuez à partir de a, b dans l'ordre Sortir. le numéro, c'est-à-dire répétez les étapes ci-dessus, cette fois c'est : 2,3. Comparez la taille et mettez-la dans c, et supprimez le numéro de la liste d'origine. Le résultat est :

<🎜. >

a = [6] b = [3] c = [1,2]
Copier après la connexion

Étape 3, répétez les étapes précédentes, le résultat est :

a = [6] b = [] c = [1,2,3]
Copier après la connexion

La dernière étape est pour annexer 6 à c , le résultat est :

a = [] b = [] c = [1,2,3,6]
Copier après la connexion

En appliquant de manière répétée le processus ci-dessus, la fusion de [1,2,3,6] et [7] est obtenu

Obtenir enfin le résultat du tri

[1,2,3,6,7]
Copier après la connexion

Cet article répertorie trois méthodes d'implémentation Python :

Méthode 1 : Traduire le processus décrit ci-dessus, un peu maladroitement

#! /usr/bin/env python
#coding:utf-8

def merge_sort(seq):
 if len(seq) ==1:
 return seq
 else:
 middle = len(seq)/2
 left = merge_sort(seq[:middle])
 right = merge_sort(seq[middle:])

 i = 0 #left 计数
 j = 0 #right 计数
 k = 0 #总计数

 while i < len(left) and j < len(right):
  if left[i] < right [j]:
  seq[k] = left[i]
  i +=1
  k +=1
  else:
  seq[k] = right[j]
  j +=1
  k +=1

 remain = left if i<j else right
 r = i if remain ==left else j

 while r<len(remain):
  seq[k] = remain[r]
  r +=1
  k +=1

 return seq
Copier après la connexion

Méthode 2 : En termes de prise de valeurs ​​dans l'ordre, appliquez Sans la méthode list.pop(), le code est plus compact et concis


#! /usr/bin/env python
#coding:utf-8


def merge_sort(lst): #此方法来自维基百科

 if len(lst) <= 1:
 return lst

 def merge(left, right):
 merged = []

 while left and right:
  merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0))

 while left:
  merged.append(left.pop(0))

 while right:
  merged.append(right.pop(0))

 return merged

 middle = int(len(lst) / 2) 
 left = merge_sort(lst[:middle])
 right = merge_sort(lst[middle:])
 return merge(left, right)
Copier après la connexion

Méthode 3 : Ça tourne Sachez que la fusion est fournie dans le module python heapq. Pour la méthode de tri, importez simplement les résultats décomposés dans cette méthode.


#! /usr/bin/env python
#coding:utf-8


from heapq import merge

def merge_sort(seq):
 if len(seq) <= 1:
 return m
 else:  
 middle = len(seq)/2
 left = merge_sort(seq[:middle])
 right = merge_sort(seq[middle:])
 return list(merge(left, right))  #heapq.merge()

if __name__=="__main__":
 seq = [1,3,6,2,4]
 print merge_sort(seq)
Copier après la connexion
Pour une introduction plus détaillée aux étapes de mise en œuvre de l'algorithme de tri par fusion dans la programmation Python, veuillez faire attention au site Web PHP chinois !


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Comment résoudre le problème des autorisations rencontré lors de la visualisation de la version Python dans le terminal Linux? Apr 01, 2025 pm 05:09 PM

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Comment copier efficacement la colonne entière d'une dataframe dans une autre dataframe avec différentes structures dans Python? Apr 01, 2025 pm 11:15 PM

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Comment enseigner les bases de la programmation novice en informatique dans le projet et les méthodes axées sur les problèmes dans les 10 heures? Apr 02, 2025 am 07:18 AM

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Comment créer dynamiquement un objet via une chaîne et appeler ses méthodes dans Python? Apr 01, 2025 pm 11:18 PM

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...

Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Comment Uvicorn écoute-t-il en permanence les demandes HTTP sans servir_forever ()? Apr 01, 2025 pm 10:51 PM

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

Quelles sont les bibliothèques Python populaires et leurs utilisations? Quelles sont les bibliothèques Python populaires et leurs utilisations? Mar 21, 2025 pm 06:46 PM

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Comment éviter d'être détecté par le navigateur lors de l'utilisation de Fiddler partout pour la lecture de l'homme au milieu? Apr 02, 2025 am 07:15 AM

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

See all articles