Johdanto yhdistämisjärjestykseen Java-sovelluksessa

Yhdistämisohjelma Java-ohjelmassa on yksi yleisimmin käytetyistä ja tehokkaimmista algoritmeista. Yhdistämislajittelu perustuu jako- ja valloitustekniikkaan, joka käsittää tietyn ongelman jakamisen useisiin alioikeuksiin ja jokaisen alaongelman ratkaisemisen itsenäisesti. Kun aliongelmat on ratkaistu, yhdistämme niiden tulokset saadaan lopullinen ratkaisu ongelmaan. Yhdistämisalgoritmi voidaan toteuttaa käyttämällä rekursiota, koska siihen sisältyy työskentely alaprobleemien kanssa eikä pääongelma.

Kuinka yhdistämisjärjestys toimii?

Tarkastellaan lajittelematonta taulukkoa, joka on lajiteltava yhdistämisjärjestysalgoritmin avulla. Tässä on vaiheet arvojen taulukon lajitteluun: 18, 8, 4, 13, 10, 12, 7 ja 11:

  • Ensimmäinen vaihe sisältää kääntöelementin löytämisen, jonka perusteella tulojärjestelmämme jaetaan alaryhmiin.
  • Katsotaanpa, että elementti 13 on valittu niveliksi, siksi alkuperäinen ryhmä jaetaan kahteen alaryhmään. Ensimmäinen aliryhmä sisältää 18, 8, 4, 13 ja toinen alaryhmä sisältää jäljellä olevat elementit 10, 12, 7, 11.
  • Vaiheessa 2 saadut alakerrokset jaotellaan edelleen kuten vaiheessa 1 ja tämä jatkuu.
  • Kun pääryhmä on jaettu alaryhmiin, joissa on yksittäisiä elementtejä, aloitamme näiden alaryhmien yhdistämisen uudelleen siten, että sulautetut elementit ovat lajitelmassa.
  • Näin todellinen jako ja valloitus toimii:

Yhdistämisohjelma Java-ohjelmassa

Tässä on koodiesimerkki, joka näyttää yhdistämislajittelun toteutuksen Java: ssa:

Koodi:

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

Yllä oleva koodi tuottaa lajitellun taulukon tulosteena.

lähtö:

Milloin meidän pitäisi käyttää yhdistämislajittelua?

Yhdistämislajittelua voidaan käyttää seuraavissa tilanteissa:

  • Kun lajiteltava tietorakenne ei tue satunnaista pääsyä, yhdistämislajittelu voi olla hyödyllinen ja tehokas.
  • Kun vaaditaan korkeaa rinnakkaisuutta, yhdistämislajittelua voidaan käyttää, koska erilaiset alioikeudet voidaan ratkaista itsenäisesti käyttämällä useita rinnakkain meneviä prosesseja.
  • Yhdistetty lajittelu on nopeampaa työskennellessä linkitettyjen luetteloiden kanssa, koska osoittimia voidaan helposti muuttaa luetteloita yhdistäessä.
  • Yhdistämislajittelua voidaan pitää vakaana lajitteluna, mikä tarkoittaa, että taulukon sama elementti ylläpitää alkuperäisiä asentojaan toisiinsa nähden. Sellaisissa tapauksissa, joissa vaaditaan korkeaa vakautta, voidaan mennä yhdistämislajitteluun.

Yhdistelmälajittelun monimutkaisuusanalyysi

Alla olevien pisteiden analysoinnin yhdistämisjärjestys:

  • Yhdistämislajittelu on rekursiivinen algoritmi, ja sen ajan monimutkaisuus on O (n * log n) kaikissa kolmessa tapauksessa (pahin, paras ja keskimääräinen), koska yhdistämisjärjestys jakaa taulukon kahteen yhtä suureen puolikkaaseen ja vie lineaarisen ajan niiden yhdistämiseen.
  • Yhdistelmälajin avaruuden monimutkaisuus on O (n), koska se toimii rekursiivisella lähestymistavalla. Siksi yhdistämislajittelua voidaan pitää nopeana, tila- ja aikatehokkaana algoritmina.

Yhdistämislajitelman vertaaminen muihin algoritmeihin

Alla olevia pisteitä vertaa yhdistämislajittelua muihin algoritmeihin:

  • Kasalajittelu on samanaikainen monimutkaisuus kuin yhdistämislajittelu, mutta se vaatii vain O (1) aputilan yhdistämislajin O (n) sijasta. Siksi kasalajittelu on tilaa tehokkaampaa kuin yhdistämislajittelu.
  • Nopean lajittelun toteutukset ylittävät yleensä yhdistämislajittelun RAM-pohjaisten taulukkojen lajittelua varten.
  • Yhdistetty lajittelu ylittää nopean lajittelun ja kasan lajittelualgoritmit työskennellessäsi linkitetyn luettelon kanssa, koska osoittimia voidaan helposti muuttaa.

Päätelmä-ohjelma yhdistämislajitteluun Java-sovelluksessa

Artikkelista päätellään, että yhdistämislajittelu on tärkeä käsite ymmärtää algoritmien suhteen.

Suositellut artikkelit

Tämä on opas Java-yhdistämisohjelmaan. Tässä keskustellaan kuinka sen toiminta, käyttö, yhdistämisohjelma jne. Voit myös käydä läpi muiden asiaan liittyvien artikkeleidemme saadaksesi lisätietoja-

  1. Yhdistä Järjestä Java
  2. Yhdistä lajittelualgoritmit Java-sovellukseen
  3. Kasa Lajittele C: ssä
  4. Kasa lajittelu Java
  5. Java-asennustyökalut
  6. Heap Sort Pythonissa
  7. Pikalajittelualgoritmit Java-sovelluksessa
  8. Kuusi suosituinta lajittelualgoritmia JavaScriptissä
  9. Kuusi suosituinta lajittelualgoritmia Pythonissa