Programul Python pentru sortare prin îmbinare
Merge Sort este a Diviza și cuceri algoritm. Împarte matricea de intrare în două jumătăți, se numește singur pentru cele două jumătăți și apoi îmbină cele două jumătăți sortate. Funcția merge(). este folosit pentru a îmbina două jumătăți. Merge(arr, l, m, r) este un proces cheie care presupune că arr[l..m] și arr[m+1..r] sunt sortate și îmbină cele două sub-matrice sortate într-una singură.
Programul Python pentru sortare prin îmbinare
Cele furnizate Piton codul implementează algoritmul Merge Sort, o tehnică de sortare divide-and-cuquer. Acesta descompune o matrice în submatrice mai mici, le sortează individual și apoi le îmbină din nou împreună pentru a crea o matrice sortată. Codul include două funcții principale: merge, responsabilă pentru îmbinarea a două subbary, și mergeSort, care împarte și sortează recursiv matricea. Funcția de îmbinare combină două submatrice sortate într-o singură matrice sortată. Funcția mergeSort împarte recursiv matricea în jumătate până când fiecare subbary are un singur element, apoi le îmbină pentru a obține rezultatul final sortat. Exemplul sortează o matrice folosind Merge Sort și tipărește atât matricea inițială, cât și cea sortată.
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> |
Ieșire
Given array is 12 11 13 5 6 7 Sorted array is 5 6 7 11 12 13
Complexitatea timpului: O(n*log(n))
Spațiu auxiliar: Pe)
Vă rugăm să consultați articolul complet pe Merge Sort pentru mai multe detalii!