Sissejuhatus Java sorteerimise ühendamisse

Java ühendamise programm on üks enim kasutatavaid ja tõhusamaid algoritme. Ühendamise sortimine põhineb jagamise ja vallutamise tehnikal, mis hõlmab antud probleemi jagamist mitmeks alamprobleemiks ja iga alamprobleemi iseseisvat lahendamist. Kui alamprobleemid on lahendatud, ühendame nende tulemused, et saada probleemile lõplik lahendus. Ühendamisalgoritmi saab rakendada rekursiooni abil, kuna see hõlmab põhiprobleemi asemel alamprobleemidega töötamist.

Kuidas Merge Sort töötab?

Vaatleme sorteerimata massiivi, mida tuleb sorteerida ühendamisalgoritmi abil. Järgnevad sammud väärtustega massiivi sortimiseks: 18, 8, 4, 13, 10, 12, 7 ja 11:

  • Esimene samm hõlmab pöördeelemendi leidmist, mille alusel meie sisendmassiiv jagatakse alamkihtideks.
  • Mõelgem, et pöördepunktiks on valitud element 13, seetõttu jaguneb algne massiiv kaheks alamkiibiks. Esimene alammassiiv sisaldab 18, 8, 4, 13 ja teine ​​alammassiiv sisaldab ülejäänud elemente 10, 12, 7, 11.
  • Etapis 2 saadud alamkihid jagatakse täiendavalt alajaotusteks nagu 1. etapp ja see jätkub.
  • Kui põhimassiiv on jagatud üksikute elementidega alammassiivideks, alustame nende alammassiivide uuesti ühendamist selliselt, et ühendatud elemendid on järjestatud järjekorras.
  • Tegelik jagamine ja vallutamine toimib järgmiselt:

Ühendamisprogramm Java-s

Siin on koodinäide, mis näitab ühendamise sortimise rakendamist javas:

Kood:

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

Ülaltoodud kood annab väljundina sorteeritud massiivi.

Väljund:

Millal peaksime kasutama ühendamis sorteerimist?

Ühendamise sortimist saab kasutada järgmistes stsenaariumides:

  • Kui sorteeritav andmestruktuur ei toeta juhuslikku juurdepääsu, võib liitmise sortimine olla kasulik ja tõhus.
  • Kui on vaja kõrgetasemelist paralleelsust, saab kasutada liitmise sorteerimist, kuna erinevaid alamprobleeme saab lahendada iseseisvalt, kasutades paljusid paralleelselt töötavaid protsesse.
  • Ühendatud sortimine on lingitud loenditega töötamisel kiirem, kuna viiteid saab loendite ühendamise ajal hõlpsasti muuta.
  • Ühendamise sortimist võib pidada stabiilseks sortimiseks, mis tähendab, et massiivi sama element säilitab oma algsed positsioonid üksteise suhtes. Juhtudel, kui on vaja suurt stabiilsust, võib sorteerida.

Ühendamise sorteerimise keerukuse analüüs

Allpool toodud punktides on liitmise sorteerimise keerukus:

  • Ühendamise sort on rekursiivne algoritm ja selle ajaline keerukus on O (n * log n) kõigil kolmel juhul (halvim, parim ja keskmine), kuna liitmise sort jagab massiivi kaheks võrdseks pooleks ja nende ühendamiseks kulub lineaarne aeg.
  • Ühendamisruumi keerukus ruumis on O (n), kuna see töötab rekursiivse lähenemisviisi korral. Seetõttu võib ühendamise sortimist pidada kiireks, ruumi- ja ajaliselt tõhusaks algoritmiks.

Liitmise sortimise võrdlemine teiste algoritmidega

Allpool toodud punktides võrreldakse liitmise sorteerimist muude algoritmidega:

  • Heap Sort on sama ajaliselt keeruline nagu merge sortimine, kuid see nõuab ühendamise sorti O (n) asemel ainult O (1) abiruumi. Seega on hunnikute sorteerimine ruumisäästlikum kui merge sortimine.
  • Kiire sorteerimise rakendused ületavad RAM-põhiste massiivide sorteerimisel tavaliselt liitmise sorteerimist.
  • Ühendatud sorteerimine ületab lingitud nimekirjaga töötamisel kiire sortimise ja hunniku sortimise algoritme, kuna osutit saab hõlpsasti muuta.

Kokkuvõtteprogramm ühendamise sortimiseks Java-s

Artiklist järeldatakse, et liitmisviis on oluline mõiste, mida algoritmide mõistmisel mõista.

Soovitatavad artiklid

See on Java Java-s ühendamisprogrammi juhend. Siin räägime sellest, kuidas peaks toimima selle töö, kasutamine, ühendamisprogramm jms. Lisateabe saamiseks lugege ka meie teisi seotud artikleid -

  1. Ühenda sortimine Java-s
  2. Ühenda sortimisalgoritmid Java-s
  3. Hunnik Sorteeri C-s
  4. Hunnik sorteerib Java
  5. Java juurutustööriistad
  6. Hunnik sorteerimine Pythonis
  7. Kiire sortimise algoritmid Java-s
  8. Kuus parimat sortimisalgoritmi JavaScriptis
  9. Pythonis 6 parimat sortimisalgoritmi

Kategooria: