Tri fusion en Python
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 13Autres extensions
Exemples Python3