Ú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.

  1. Zlúčiť zoradenie v jazyku Java
  2. Zlúčiť algoritmy triedenia v Jave
  3. Halda Zoradiť podľa C.
  4. Usporiadanie haldy v Jave
  5. Java Deployment Tools
  6. Halda Zoradiť v Pythone
  7. Algoritmy rýchleho triedenia v Jave
  8. Top 6 triediaci algoritmus v JavaScripte
  9. Top 6 triediacich algoritmov v Pythone

Kategórie: