Ú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.
- Sloučit řazení v Javě
- Sloučit třídění algoritmů v Javě
- Haldy Seřadit v C.
- Hromadné řazení v Javě
- Java Deployment Tools
- Haldy Seřadit v Pythonu
- Algoritmy rychlého třídění v Javě
- Top 6 algoritmů třídění v JavaScriptu
- Top 6 třídících algoritmů v Pythonu