Merge Sort je a Rozděl a panuj algoritmus. Rozdělí vstupní pole na dvě poloviny, zavolá se pro dvě poloviny a poté sloučí dvě setříděné poloviny. Funkce merge(). se používá ke spojení dvou polovin. Sloučení (arr, l, m, r) je klíčový proces, který předpokládá, že arr[l..m] a arr[m+1..r] jsou setříděny a sloučí dvě setříděná dílčí pole do jednoho.
Program Python pro řazení sloučením
Poskytnuté Krajta kód implementuje algoritmus Merge Sort, metodu třídění rozděl a panuj. Rozdělí pole na menší podpole, seřadí je jednotlivě a poté je sloučí zpět k vytvoření setříděného pole. Kód obsahuje dvě hlavní funkce: merge, odpovědný za sloučení dvou podpolí, a mergeSort, který rekurzivně rozděluje a třídí pole. Funkce sloučení kombinuje dvě seřazené podpole do jednoho seřazeného pole. Funkce mergeSort rekurzivně rozdělí pole na polovinu, dokud každé podpole nebude mít jeden prvek, a poté je sloučí, aby se dosáhlo konečného seřazeného výsledku. Příklad třídí pole pomocí Merge Sort a vytiskne počáteční i seřazené pole.
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> |
odlévat řetězec jako int
>
>Výstup
Given array is 12 11 13 5 6 7 Sorted array is 5 6 7 11 12 13>
Časová náročnost: O(n*log(n))
hodnota řetězce java
Pomocný prostor: Na)
Přečtěte si prosím celý článek na Sloučit třídění Více podrobností!