Úvod do slučovacího třídění v Javě

Program pro sloučení třídění v Javě je jedním z nejpoužívanějších a nejefektivnějších algoritmů. Sloučit třídění je založeno na technice dělení a dobývání, která zahrnuje rozdělení daného problému do více dílčích problémů a řešení každého dílčího problému samostatně. Po vyřešení těchto problémů spojíme jejich výsledky, abychom získali konečné řešení problému. Algoritmus sloučení řazení lze implementovat pomocí rekurze, protože zahrnuje spíše práci s dílčími problémy než hlavním problémem.

Jak funguje Merge Sort?

Podívejme se na netříděné pole, které je třeba seřadit pomocí algoritmu sloučení třídění. Zde jsou kroky zapojené do třídění pole s hodnotami: 18, 8, 4, 13, 10, 12, 7 a 11:

  • Prvním krokem je nalezení otočného prvku, na jehož základě bude naše vstupní pole rozděleno na dílčí pole.
  • Uvažujme, že prvek 13 je vybrán jako pivot, proto bude původní pole rozděleno do dvou dílčích polí. První dílčí pole bude obsahovat 18, 8, 4, 13 a druhé dílčí pole bude obsahovat zbývající prvky 10, 12, 7, 11.
  • Části získané v kroku 2 jsou dále členěny jako v kroku 1 a to pokračuje.
  • Jakmile je hlavní pole rozděleno na dílčí pole s jednotlivými prvky, začneme znovu sloučit tyto dílčí pole tak, aby sloučené prvky byly seřazeny v seřazeném pořadí.
  • Takto funguje skutečné rozdělení a dobytí:

Program pro sloučení třídění v Javě

Zde je příklad kódu ukazující implementaci slučovacího řazení v java:

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++;
)
)
)

Výše uvedený kód vytvoří jako výstup seřazené pole.

Výstup:

Kdy bychom měli použít sloučení třídění?

Sloučit řazení lze použít v následujících scénářích:

  • Pokud struktura dat, která se má třídit, nepodporuje náhodný přístup, může být třídění slučování užitečné a efektivní.
  • Pokud je vyžadována vysoká úroveň paralelismu, může být použito sloučení třídění, protože různé subproblémy mohou být řešeny nezávisle pomocí více paralelně probíhajících procesů.
  • Sloučit řazení je rychlejší při práci s propojenými seznamy, protože ukazatele lze během sloučení seznamů snadno změnit.
  • Sloučit řazení lze považovat za stabilní řazení, což znamená, že stejný prvek v poli si udržuje své původní polohy vůči sobě. V případech, kdy je vyžadována vysoká stabilita, je možné se spojit.

Analýza složitosti sloučení

Komplexnost sloučení třídění podle bodů:

  • Sloučit řazení je rekurzivní algoritmus a jeho časová složitost je O (n * log n) ve všech třech případech (nejhorší, nejlepší a průměrná), protože sloučení třídí pole do dvou stejných polovin a jejich sloučení trvá lineární čas.
  • Vesmírná složitost sloučení je O (n), protože pracuje na rekurzivním přístupu. Proto lze sloučené řazení považovat za rychlý, prostorový a časově efektivní algoritmus.

Porovnání třídění sloučení s jinými algoritmy

Níže uvedené body porovnávají sloučení třídění s jinými algoritmy:

  • Hromadné řazení má stejnou časovou složitost jako sloučení, ale vyžaduje místo pomocného prostoru O (n) sloučení pouze O (1). Proto je řazení haldy efektivnější než spojování.
  • Implementace rychlého třídění obvykle překonávají sloučené třídění pro třídění polí založených na RAM.
  • Sloučit řazení překonává algoritmy rychlého řazení a haldy při práci s propojeným seznamem, protože ukazatele lze snadno změnit.

Závěrečný program pro sloučení třídění v Javě

Z článku je vyvozeno, že sloučení je důležitým pojmem, který je třeba pochopit, pokud jde o algoritmy.

Doporučené články

Toto je průvodce Programem pro sloučení třídění v Javě. Zde diskutujeme o tom, jak by měla fungovat, jak se používá, jak je to v programu Sloučit třídění atd. Další informace naleznete také v dalších souvisejících článcích.

  1. Sloučit řazení v Javě
  2. Sloučit třídění algoritmů v Javě
  3. Haldy Seřadit v C.
  4. Hromadné řazení v Javě
  5. Java Deployment Tools
  6. Haldy Seřadit v Pythonu
  7. Algoritmy rychlého třídění v Javě
  8. Top 6 algoritmů třídění v JavaScriptu
  9. Top 6 třídících algoritmů v Pythonu

Kategorie: