Tri fusion en Python

Document 对象参考手册Exemples Python3

Le tri fusion (ou mergesort) est un algorithme de tri efficace basé sur l'opération de fusion. Cet algorithme est une application très typique de la méthode diviser pour régner (Divide and Conquer).

Diviser pour régner :

  • Diviser : Diviser récursivement la séquence actuelle en deux moitiés égales.
  • Intégrer : Fusionner les sous-séquences obtenues à l'étape précédente tout en conservant l'ordre des éléments.

Exemple

def merge(arr, l, m, r): n1 = m - l + 1 n2 = r- m # Créer des tableaux temporaires L = [0] * (n1) R = [0] * (n2) # Copier les données dans les tableaux temporaires L[] et R[] for i in range(0 , n1): L[i] = arr[l + i] for j in range⟦⟧arr(0 , n2): R[j] = arr[m + 1 + j] # Fusionner les tableaux temporaires dans arr[l..r] i = 0 # Initialiser l'indice du premier sous-tableau j = 0 # Initialiser l'indice du deuxième sous-tableau k = l # Initialiser l'indice du sous-tableau fusionné while i < n1 and j < n2 : if L[i] <= R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 # Copier les éléments restants de L[] while i < n1: arr[k] = L[i] i += 1 k += 1 # Copier les éléments restants de R[] while j < n2: arr[k] = R[j] j += 1 k += 1 def mergeSort(arr,l,r): if l < r: m = int((l+(r-1))/2) mergeSort(arr, l, m) mergeSort(arr, m+1, r) merge(arr, l, m, r) arr = [12, 11, 13, 5, 6, 7] n = len(arr) print ("Tableau donné") for i in range(n): print ("%d" %arr[i]), mergeSort(arr,0,n-1) print ("\n\nTableau trié") for i in range(n): print ("%d" %arr[i]),

L'exécution du code ci-dessus produit la sortie suivante :

给定的数组
12
11
13
5
6
7


排序后的数组
5
6
7
11
12
13

Document 对象参考手册Exemples Python3

Autres extensions