Programme Python pour le tri par fusion

Le tri par fusion est un Diviser et conquérir algorithme. Il divise le tableau d'entrée en deux moitiés, s'appelle pour les deux moitiés, puis fusionne les deux moitiés triées. La fonction fusionner() est utilisé pour fusionner deux moitiés. La fusion (arr, l, m, r) est un processus clé qui suppose que arr[l..m] et arr[m+1..r] sont triés et fusionne les deux sous-tableaux triés en un seul.

Programme Python pour le tri par fusion

Le fourni Python Le code implémente l'algorithme Merge Sort, une technique de tri diviser pour régner. Il décompose un tableau en sous-tableaux plus petits, les trie individuellement, puis les fusionne pour créer un tableau trié. Le code comprend deux fonctions principales : merge, responsable de la fusion de deux sous-tableaux, et mergeSort, qui divise et trie le tableau de manière récursive. La fonction de fusion combine deux sous-tableaux triés en un seul tableau trié. La fonction mergeSort divise récursivement le tableau en deux jusqu'à ce que chaque sous-tableau ait un seul élément, puis les fusionne pour obtenir le résultat final trié. L'exemple trie un tableau à l'aide du tri par fusion et imprime les tableaux initial et trié.

Python3




# Python program for implementation of MergeSort> # Merges two subarrays of arr[].> # First subarray is arr[l..m]> # Second subarray is arr[m+1..r]> def> merge(arr, l, m, r):> > n1> => m> -> l> +> 1> > n2> => r> -> m> > # create temp arrays> > L> => [> 0> ]> *> (n1)> > R> => [> 0> ]> *> (n2)> > # Copy data to temp arrays L[] and R[]> > for> i> in> range> (> 0> , n1):> > L[i]> => arr[l> +> i]> > for> j> in> range> (> 0> , n2):> > R[j]> => arr[m> +> 1> +> j]> > # Merge the temp arrays back into arr[l..r]> > i> => 0> # Initial index of first subarray> > j> => 0> # Initial index of second subarray> > k> => l> # Initial index of merged subarray> > while> i and j if L[i] <= R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 # Copy the remaining elements of L[], if there # are any while i arr[k] = L[i] i += 1 k += 1 # Copy the remaining elements of R[], if there # are any while j arr[k] = R[j] j += 1 k += 1 # l is for left index and r is right index of the # sub-array of arr to be sorted def mergeSort(arr, l, r): if l # Same as (l+r)//2, but avoids overflow for # large l and h m = l+(r-l)//2 # Sort first and second halves mergeSort(arr, l, m) mergeSort(arr, m+1, r) merge(arr, l, m, r) # Driver code to test above arr = [12, 11, 13, 5, 6, 7] n = len(arr) print('Given array is') for i in range(n): print('%d' % arr[i],end=' ') mergeSort(arr, 0, n-1) print(' Sorted array is') for i in range(n): print('%d' % arr[i],end=' ') # This code is contributed by Mohit Kumra>

Sortir

Given array is 12 11 13 5 6 7 Sorted array is 5 6 7 11 12 13 

Complexité temporelle : O(n*log(n))

Espace auxiliaire : Sur)

Veuillez vous référer à l'article complet sur Tri par fusion pour plus de détails!