Вступ до сортування злиття в Java

Програма для сортування об'єднань на Java - один з найбільш широко використовуваних та ефективних алгоритмів. Сортування об'єднань базується на техніці поділу та підкорення, яка передбачає поділ заданої задачі на кілька підпроблем та самостійне вирішення кожної підпроблеми. Коли підпроблеми вирішені, ми об'єднуємо їх результати, щоб отримати остаточне рішення проблеми. Алгоритм сортування об'єднань може бути реалізований за допомогою рекурсії, оскільки він передбачає роботу з підпроблемами, а не основною проблемою.

Як працює сортування об'єднань?

Розглянемо несортований масив, який потрібно сортувати за допомогою алгоритму сортування злиття. Ось кроки, що входять до сортування масиву зі значеннями: 18, 8, 4, 13, 10, 12, 7 та 11:

  • Перший крок передбачає пошук зведеного елемента, на основі якого наш вхідний масив буде розділений на підрядні.
  • Розглянемо, що елемент 13 обраний як опорний, тому вихідний масив буде розділений на два підмари. Перший підмасив буде містити 18, 8, 4, 13, а другий підмасив буде містити залишкові елементи 10, 12, 7, 11.
  • Підмари, отримані на етапі 2, далі підрозділяються, як на етапі 1, і це продовжується.
  • Після того, як основний масив розділиться на підматриці з одиничними елементами, ми знову почнемо об'єднувати ці підматриви таким чином, щоб об'єднані елементи були у відсортованому порядку.
  • Ось як працює власне поділ і підкорення:

Програма для сортування злиття в Java

Ось приклад коду, що показує реалізацію сортування злиття в java:

Код:

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

Вищевказаний код створить відсортований масив як вихід.

Вихід:

Коли ми маємо використовувати сортування об'єднань?

Сортування сортування може використовуватися в наступних сценаріях:

  • Коли структура даних для сортування не підтримує випадковий доступ, то сортування злиття може бути корисним та ефективним.
  • Коли потрібен високий рівень паралелізму, сортування злиття може використовуватися, оскільки різні підпрограми можуть бути вирішені самостійно за допомогою декількох процесів, що працюють паралельно.
  • Сортування об'єднань швидше під час роботи із пов’язаними списками, оскільки вказівники легко змінюються під час об’єднання списків.
  • Сортування об'єднань може розглядатися як стабільний сортування, що означає, що один і той же елемент у масиві зберігає свої вихідні положення відносно один одного. У випадках, коли потрібна висока стабільність, можна перейти до сортування об'єднань.

Аналіз складності сортування злиття

Нижче пунктів аналізу складності сортування злиття:

  • Сортування сортування - це рекурсивний алгоритм, його часова складність - O (n * log n) у всіх трьох випадках (найгірший, найкращий та середній), оскільки сортування злиття ділить масив на дві рівні половини та потрібен лінійний час для їх об’єднання.
  • Складність простору сортування злиття дорівнює O (n), оскільки вона діє на рекурсивному підході. Отже сортування злиття може розглядатися як швидкий, просторовий та економічно ефективний алгоритм.

Порівняння сортування злиття з іншими алгоритмами

Нижче пунктів порівнюємо сортування злиття з іншими алгоритмами:

  • Сортування куч має ту саму складність часу, що і сортування злиття, але для цього потрібен лише допоміжний простір O (1) замість O (n) сортування злиття. Отже, сортування купи є більш просторовим, ніж сортування.
  • Реалізації швидкого сортування зазвичай перевершують сортування злиття для сортування масивів на основі оперативної пам'яті.
  • Об'єднання сортування перевершує алгоритми швидкого сортування та купірування сортування під час роботи із пов'язаним списком, оскільки вказівники легко змінюються.

Висновок-Програма для сортування об'єднань у Java

Зі статті зроблено висновок, що сортування злиття є важливою концепцією, яку потрібно розуміти, коли мова йде про алгоритми.

Рекомендовані статті

Це посібник до Програми для сортування об'єднань на Java. Тут ми обговорюємо, як має працювати, використання, програма з’єднання сортування тощо. Ви також можете ознайомитись з іншими пов'язаними з нами статтями, щоб дізнатися більше -

  1. Об’єднати сортування в Java
  2. Об’єднайте алгоритми сортування в Java
  3. Сортування купи в С
  4. Сортування купи в Java
  5. Інструменти розгортання Java
  6. Сортування купи в Python
  7. Швидке сортування алгоритмів на Java
  8. Топ-6 алгоритмів сортування в JavaScript
  9. Топ-6 алгоритмів сортування в Python