Yhdistämislajittelu on a hajota ja hallitse algoritmi. Se jakaa syöttötaulukon kahteen puolikkaaseen, kutsuu itseään kahdeksi puolikkaaksi ja yhdistää sitten kaksi lajiteltua puoliskoa. Merge()-funktio käytetään kahden puolikkaan yhdistämiseen. Yhdistäminen (arr, l, m, r) on avainprosessi, jossa oletetaan, että arr[l..m] ja arr[m+1..r] lajitellaan ja yhdistää kaksi lajiteltua alitaulukkoa yhdeksi.
Python-ohjelma yhdistämislajitteluun
Tarjottu Python koodi toteuttaa Merge Sort -algoritmin, jakaa ja hallitse -lajittelutekniikan. Se jakaa taulukon pienempiin aliryhmiin, lajittelee ne yksitellen ja yhdistää ne sitten takaisin yhteen luoden lajiteltua taulukkoa. Koodi sisältää kaksi päätoimintoa: merge, joka vastaa kahden alitaulukon yhdistämisestä, ja mergeSort, joka jakaa ja lajittelee taulukon rekursiivisesti. Yhdistämistoiminto yhdistää kaksi lajiteltua alitaulukkoa yhdeksi lajitetuksi taulukoksi. MergeSort-funktio jakaa taulukon rekursiivisesti kahtia, kunnes jokaisessa alitaulukossa on yksi elementti, ja yhdistää ne sitten lopullisen lajiteltujen tulosten saavuttamiseksi. Esimerkki lajittelee taulukon yhdistämislajittelulla ja tulostaa sekä alkuperäiset että lajitellut taulukot.
silmukalle c
Python 3
poliisikomissaari
# 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> |
>
puhdista npm-välimuisti
>Lähtö
Given array is 12 11 13 5 6 7 Sorted array is 5 6 7 11 12 13>
Aika monimutkaisuus: O(n*log(n))
Aputila: Päällä)
mikä on map java
Katso täydellinen artikkeli aiheesta Yhdistä lajittelu Lisätietoja!