Introducere în Merge Sort în Java

Programul pentru Sortare Merge în Java este unul dintre algoritmii cei mai utilizați și eficienți. Sortarea Merge se bazează pe tehnica de împărțire și cucerire, care implică împărțirea unei probleme date în mai multe subprobleme și rezolvarea independentă a fiecărui subproblem. Când se rezolvă subproblemele, le combinăm rezultatele pentru a obține soluția finală a problemei. Algoritmul de sortare combinată poate fi implementat folosind recursiv, deoarece implică lucrul cu subprobleme, mai degrabă decât cu problema principală.

Cum funcționează Merge Sort?

Să luăm în considerare un tablou nesortat care trebuie sortat folosind algoritmul de sortare a îmbinărilor. Iată pașii implicați în sortarea unui tablou cu valori: 18, 8, 4, 13, 10, 12, 7 și 11:

  • Primul pas implică găsirea unui element pivot pe baza căruia tabloul nostru de intrare va fi împărțit în subordonări.
  • Să luăm în considerare faptul că elementul 13 este ales ca pivot, prin urmare, matricea originală va fi împărțită în două subarburi. Prima subarbă va conține 18, 8, 4, 13 și a doua subarbă va conține elementele rămase 10, 12, 7, 11.
  • Subdomeniile obținute în etapa 2 sunt în continuare subdivizate ca în etapa 1 și aceasta continuă.
  • Odată ce matricea principală este împărțită în subarburi cu elemente unice, vom începe să contopim din nou aceste subarburi, astfel încât elementele combinate să fie ordonate.
  • Iată cum funcționează divizarea și cucerirea efectivă:

Program pentru sortare Merge în Java

Iată un exemplu de cod care arată implementarea sortării de îmbinare în Java:

Cod:

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

Codul de mai sus va produce o ieșire sortată ca ieșire.

ieşire:

Când ar trebui să folosim sortarea Merge?

Sortarea Merge poate fi utilizată în următoarele scenarii:

  • Când structura de date care trebuie sortată nu acceptă accesul la întâmplare, atunci sortarea de îmbinare poate fi utilă și eficientă.
  • Când este necesar un nivel ridicat de paralelism, sortarea de îmbinare poate fi utilizată deoarece diferite subprobleme pot fi rezolvate independent folosind mai multe procese care se execută în paralel.
  • Sortarea combinării este mai rapidă atunci când lucrați cu liste conectate, deoarece indicatoarele pot fi ușor modificate în timp ce fuzionați listele.
  • Sortarea Merge poate fi considerată un sort stabil ceea ce înseamnă că același element dintr-un tablou își păstrează pozițiile inițiale unul față de celălalt. În cazurile în care este necesară o stabilitate ridicată, se poate opta pentru sortarea fuziunii.

Analiza complexității sortării Merge

Mai jos punctele de complexitate de analiză a sortării de îmbinare:

  • Sortarea Merge este un algoritm recursiv, iar complexitatea sa de timp este O (n * log n) în toate cele trei cazuri (cel mai rău, cel mai bun și mediu), întrucât sortul de îmbinare împarte tabloul în două jumătăți egale și necesită timp liniar pentru a le îmbina.
  • Complexitatea spațială a tipului de îmbinare este O (n), deoarece funcționează pe abordarea recursivă. Prin urmare, sortarea fuziunii poate fi considerată ca un algoritm rapid, spațiu și eficient din timp.

Compararea sortării Merge cu alți algoritmi

Punctele de mai jos compară sortarea îmbinării cu alți algoritmi:

  • Sortarea Heap are aceeași complexitate de timp ca sortarea de îmbinare, dar necesită doar spațiu auxiliar O (1) în loc de O (n) de sortare a combinării. Prin urmare, sortarea mormanului este mai eficientă în spațiu decât sortarea fuziunii.
  • Implementările de sortare rapidă, în general, depășesc tipul de îmbinare pentru sortarea matricelor bazate pe RAM.
  • Fuzionarea sortează depășește algoritmii de sortare rapidă și sortare a heap-ului atunci când lucrați cu lista legată, deoarece indicatoarele pot fi ușor modificate.

Concluzie-Program pentru sortare Merge în Java

Din articol, se concluzionează că sortarea fuziunii este un concept important de înțeles atunci când vine vorba de algoritmi.

Articole recomandate

Acesta este un ghid al Programului pentru Sortare Merge în Java. Aici vom discuta despre modul în care ar trebui să funcționeze, utilizarea lui, programul Sortare Merge etc. Puteți parcurge și alte articole conexe pentru a afla mai multe-

  1. Sortare sortare în Java
  2. Fuzionarea algoritmilor de sortare în Java
  3. Sortare pentru grămadă în C
  4. Sortare la grămadă în Java
  5. Instrumente de implementare Java
  6. Sort de grămadă în Python
  7. Algoritmi de sortare rapidă în Java
  8. Top 6 Sortarea algoritmului în JavaScript
  9. Top 6 Sortarea algoritmilor din Python