Wprowadzenie do sortowania korespondencji seryjnej w Javie

Program do sortowania korespondencji seryjnej w Javie jest jednym z najczęściej używanych i wydajnych algorytmów. Sortowanie metodą scalania opiera się na technice dzielenia i podbijania, która polega na podzieleniu danego problemu na wiele podproblemów i rozwiązaniu każdego podproblemu niezależnie. Po rozwiązaniu podproblemów łączymy ich wyniki, aby uzyskać ostateczne rozwiązanie problemu. Algorytm sortowania scalonego można zaimplementować za pomocą rekurencji, ponieważ wymaga on pracy z podproblemami, a nie głównym problemem.

Jak działa sortowanie korespondencji seryjnej?

Rozważmy nieposortowaną tablicę, którą należy posortować za pomocą algorytmu sortowania scalającego. Oto kroki związane z sortowaniem tablicy o wartościach: 18, 8, 4, 13, 10, 12, 7 i 11:

  • Pierwszy krok polega na znalezieniu elementu przestawnego, na podstawie którego nasza tablica wejściowa zostanie podzielona na podcienie.
  • Rozważmy, że element 13 jest wybrany jako oś obrotu, dlatego pierwotna tablica zostanie podzielona na dwie pod-tablice. Pierwsza podtablica będzie zawierać 18, 8, 4, 13, a druga podtablica będzie zawierać pozostałe elementy 10, 12, 7, 11.
  • Podcienie uzyskane w etapie 2 są dalej dzielone jak w etapie 1 i to trwa.
  • Gdy główna tablica zostanie podzielona na podgrupy z pojedynczymi elementami, zaczynamy ponownie scalać te podgrupy w taki sposób, aby scalone elementy były posortowane.
  • Oto jak działa podział i podbijanie:

Program do sortowania korespondencji seryjnej w Javie

Oto przykład kodu pokazujący implementację sortowania korespondencji seryjnej w java:

Kod:

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

Powyższy kod wygeneruje posortowaną tablicę jako wynik.

Wynik:

Kiedy powinniśmy użyć sortowania według scalania?

Sortowania według scalenia można użyć w następujących scenariuszach:

  • Gdy struktura danych do sortowania nie obsługuje dostępu losowego, sortowanie według scalania może być pomocne i wydajne.
  • Gdy wymagany jest wysoki poziom równoległości, można zastosować sortowanie scalające, ponieważ różne podproblemy można rozwiązać niezależnie przy użyciu wielu równoległych procesów.
  • Sortowanie ze scalaniem jest szybsze podczas pracy z listami połączonymi, ponieważ wskaźniki można łatwo zmienić podczas scalania list.
  • Sortowanie scalone można traktować jako sortowanie stabilne, co oznacza, że ​​ten sam element w tablicy zachowuje swoje oryginalne pozycje względem siebie. W przypadkach, w których wymagana jest wysoka stabilność, można przejść do sortowania po scaleniu.

Analiza złożoności sortowania korespondencji seryjnej

Poniżej punktowa analiza złożoności sortowania korespondencji seryjnej:

  • Sortowanie scalone jest algorytmem rekurencyjnym, a jego złożoność czasowa wynosi O (n * log n) we wszystkich trzech przypadkach (najgorszy, najlepszy i średni), ponieważ sortowanie scalone dzieli tablicę na dwie równe połowy i ich scalenie zajmuje czas liniowy.
  • Złożoność przestrzenna sortowania przez scalenie wynosi O (n), ponieważ działa w oparciu o podejście rekurencyjne. Stąd sortowanie scalające można uznać za algorytm szybki, przestrzenny i czasowy.

Porównanie sortowania scalonego z innymi algorytmami

Poniższe punkty porównują sortowanie według scalania z innymi algorytmami:

  • Sortowanie sterty ma tę samą złożoność czasową co sortowanie po scaleniu, ale wymaga tylko przestrzeni pomocniczej O (1) zamiast O (n) sortowania po scaleniu. Dlatego sortowanie sterty zajmuje więcej miejsca niż sortowanie scalone.
  • Implementacje szybkiego sortowania zwykle przewyższają sortowanie scalające przy sortowaniu tablic opartych na pamięci RAM.
  • Scal sortowanie przewyższa algorytmy szybkiego sortowania i sortowania sterty podczas pracy z połączoną listą, ponieważ wskaźniki można łatwo zmienić.

Program końcowy do sortowania korespondencji seryjnej w Javie

Z artykułu wynika, że ​​sortowanie według scalania jest ważną koncepcją, którą należy zrozumieć, jeśli chodzi o algorytmy.

Polecane artykuły

Jest to przewodnik po Program dla sortowania korespondencji seryjnej w Javie. Tutaj omawiamy, jak powinna działać, jak korzystać, program Merge Sort itp. Możesz również przejrzeć nasze inne powiązane artykuły, aby dowiedzieć się więcej-

  1. Scal sortowanie w Javie
  2. Scal sortowanie algorytmów w Javie
  3. Sortuj sterty w C.
  4. Sortuj sterty w Javie
  5. Narzędzia wdrażania Java
  6. Sortuj sterty w Pythonie
  7. Algorytmy szybkiego sortowania w Javie
  8. Top 6 algorytm sortowania w JavaScript
  9. Top 6 algorytmów sortowania w Pythonie