Úvod do zlúčenia zoradenia v jazyku Java
Program Merge Sort in Java je jedným z najpoužívanejších a najúčinnejších algoritmov. Zlúčiť zoraďovanie je založené na technike rozdelenia a dobývania, ktorá zahŕňa rozdelenie daného problému do viacerých čiastkových problémov a samostatné vyriešenie každého problému. Keď sa problémy vyriešia, skombinujeme ich výsledky, aby sme dostali konečné riešenie problému. Algoritmus zlúčenia zoradenia môže byť implementovaný pomocou rekurzie, pretože zahŕňa skôr prácu s problémami ako s hlavným problémom.
Ako funguje Merge Sort?
Uvažujme netriedené pole, ktoré je potrebné zoradiť pomocou algoritmu zlúčenia zoradenia. Tu sú kroky, ktoré sa týkajú triedenia polí s hodnotami: 18, 8, 4, 13, 10, 12, 7 a 11:
- Prvý krok spočíva v nájdení otočného prvku, na základe ktorého sa naše vstupné pole rozdelí na čiastkové polia.
- Uvažujme, že prvok 13 je vybraný ako pivot, a preto bude pôvodné pole rozdelené do dvoch čiastkových polí. Prvá čiastková oblasť bude obsahovať 18, 8, 4, 13 a druhá čiastková oblasť bude obsahovať zvyšné prvky 10, 12, 7, 11.
- Podiely získané v kroku 2 sa ďalej delia ako v kroku 1 a to pokračuje.
- Akonáhle je hlavné pole rozdelené na čiastkové polia s jednotlivými prvkami, začneme znova spájať tieto čiastkové polia tak, aby zlúčené prvky boli zoradené.
- Takto funguje skutočné rozdelenie a dobitie:
Program pre zlúčenie zoradenia v Jave
Tu je príklad kódu ukazujúci implementáciu zlúčenia zoradenia v jave:
kód:
package com.edubca.sorting;
public class MergeSort (
private int() array;
private int() tempMergedArr;
private int length;
public static void main(String a())(
int() inputArr = (18, 8, 4, 13, 10, 12, 7, 11);
MergeSort mergeSort = new MergeSort();
mergeSort.sort(inputArr);
for(int i:inputArr)(
System.out.print(i + " ");
)
)
public void sort(int inputArr()) (
this.array = inputArr;
this.length = inputArr.length;
this.tempMergedArr = new int(length);
performMergeSort(0, length - 1);
)
private void performMergeSort(int lowerIndex, int higherIndex) (
if (lowerIndex < higherIndex) (
int middle = lowerIndex + (higherIndex - lowerIndex) / 2;
// Sort the left side of the array call performMergeSort recursively
performMergeSort(lowerIndex, middle);
// Sort the right side of the array call performMergeSort recursively
performMergeSort(middle + 1, higherIndex);
// Merge subparts using a temporary array
mergeData(lowerIndex, middle, higherIndex);
)
)
private void mergeData (int lowerIndex, int middle, int higherIndex) (
for (int i = lowerIndex; i <= higherIndex; i++) (
tempMergedArr(i) = array(i);
)
int i = lowerIndex;
int j = middle + 1;
int k = lowerIndex;
while (i <= middle && j <= higherIndex) (
if (tempMergedArr(i) <= tempMergedArr(j)) (
array(k) = tempMergedArr(i);
i++;
) else (
array(k) = tempMergedArr(j);
j++;
)
k++;
)
while (i <= middle) (
array(k) = tempMergedArr(i);
k++;
i++;
)
)
)
Vyššie uvedený kód vytvorí triedené pole ako výstup.
Výkon:
Kedy by sme mali použiť zlúčenie zoradenia?
Zlúčiť zoradenie je možné použiť v nasledujúcich scenároch:
- Ak dátová štruktúra, ktorá sa má triediť, nepodporuje náhodný prístup, potom môže byť zlúčené zoradenie užitočné a efektívne.
- Ak sa vyžaduje vysoká úroveň rovnobežnosti, môže sa použiť zlučovacie usporiadanie, pretože rôzne sub problémy môžu byť riešené nezávisle pomocou viacerých paralelne prebiehajúcich procesov.
- Zlúčiť zoradenie je rýchlejšie pri práci s prepojenými zoznamami, pretože ukazovatele sa dajú ľahko zmeniť pri zlučovaní zoznamov.
- Zlúčiť zoradenie možno považovať za stabilné zoradenie, čo znamená, že ten istý prvok v poli si zachováva svoje pôvodné polohy voči sebe. V prípadoch, keď sa vyžaduje vysoká stabilita, je možné sa spojiť.
Analýza zložitosti zlúčenia
Analýza zložitosti zlúčenia podľa bodov:
- Zlúčiť zoradenie je rekurzívny algoritmus a jeho časová zložitosť je O (n * log n) vo všetkých troch prípadoch (najhoršie, najlepšie a priemerné), pretože zlúčenie zoradí pole na dve rovnaké polovice a na ich zlúčenie trvá lineárny čas.
- Vesmírna zložitosť zlúčenia je O (n), pretože pracuje na rekurzívnom prístupe. Z tohto dôvodu možno zlúčenie zoradiť ako rýchly, priestorovo a časovo efektívny algoritmus.
Porovnanie triedenia zlúčenia s inými algoritmami
Nižšie uvedené body porovnávajú zlúčenie zoradenia s inými algoritmami:
- Usporiadanie haldy má rovnakú časovú zložitosť ako zlučovanie, ale namiesto O (n) zlučovania sa vyžaduje iba pomocný priestor O (1). Preto je triedenie haldy efektívnejšie ako zlúčenie.
- Implementácie rýchleho zoradenia vo všeobecnosti prekonávajú zlúčené zoraďovanie pre triedenie polí založených na pamäti RAM.
- Zlúčiť zoradenie predstihuje algoritmy rýchleho zoradenia a haldy pri práci s prepojeným zoznamom, pretože ukazovatele sa dajú ľahko zmeniť.
Záverečný program pre zlúčenie zoradenia v jazyku Java
Z tohto článku sa dospelo k záveru, že zlučovanie je dôležitým konceptom, ktorý je potrebné pochopiť, pokiaľ ide o algoritmy.
Odporúčané články
Toto je sprievodca programom na zlúčenie triedenia v jazyku Java. Tu diskutujeme o tom, ako by mala fungovať jeho práca, jej použitie, program Zlúčiť zoradenie atď. Ďalšie informácie nájdete aj v ďalších súvisiacich článkoch.
- Zlúčiť zoradenie v jazyku Java
- Zlúčiť algoritmy triedenia v Jave
- Halda Zoradiť podľa C.
- Usporiadanie haldy v Jave
- Java Deployment Tools
- Halda Zoradiť v Pythone
- Algoritmy rýchleho triedenia v Jave
- Top 6 triediaci algoritmus v JavaScripte
- Top 6 triediacich algoritmov v Pythone