Java сортировка слиянием: простое и удобное решение

Сортировка слиянием (Merge Sort) - это один из самых популярных алгоритмов сортировки в Java. Этот алгоритм принадлежит к так называемым "дивизионным" сортировкам, поскольку сортирует массив путем разбиения его на две половины и рекурсивного слияния уже отсортированных подмассивов.

Основной алгоритм сортировки слиянием можно реализовать следующим образом:

1. Разделить исходный массив пополам, используя индекс середины.

2. Рекурсивно вызвать функцию сортировки слиянием для каждой половины массива.

3. Объединить отсортированные половины массива в один упорядоченный массив.

Процесс слияния двух отсортированных массивов заключается в следующих действиях:

1. Создать новый массив, в котором будут храниться элементы двух отсортированных массивов.

2. Сравнить первый элемент каждого массива и добавлять в новый массив наименьший из них.

3. Повторять шаг 2 для оставшихся элементов обоих массивов.

4. Если один из массивов кончается, то оставшиеся элементы добавляем в конец нового массива.

Ниже приведен пример кода реализации сортировки слиянием на языке программирования Java:


public class MergeSort {
    public static void main(String[] args) {
        int[] arr = { 5, 2, 7, 1, 9, 3 };
        mergeSort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
    }
    public static void mergeSort(int[] arr, int left, int right) {
        if (left < right) {
            int middle = (left + right) / 2;
            mergeSort(arr, left, middle);
            mergeSort(arr, middle + 1, right);
            merge(arr, left, middle, right);
        }
    }
    public static void merge(int[] arr, int left, int middle, int right) {
        int n1 = middle - left + 1;
        int n2 = right - middle;
        int[] leftArr = new int[n1];
        int[] rightArr = new int[n2];
        for (int i = 0; i < n1; i++) {
            leftArr[i] = arr[left + i];
        }
        for (int j = 0; j < n2; j++) {
            rightArr[j] = arr[middle + 1 + j];
        }
        int i = 0, j = 0, k = left;
        while (i < n1 && j < n2) {
            if (leftArr[i] <= rightArr[j]) {
                arr[k] = leftArr[i];
                i++;
            } else {
                arr[k] = rightArr[j];
                j++;
            }
            k++;
        }
        while (i < n1) {
            arr[k] = leftArr[i];
            i++;
            k++;
        }
        while (j < n2) {
            arr[k] = rightArr[j];
            j++;
            k++;
        }
    }
}

В данном примере функция `mergeSort` рекурсивно вызывает себя для каждой половины массива, а затем вызывает функцию `merge`, чтобы объединить отсортированные подмассивы. Функция `merge` сливает два отсортированных подмассива в один упорядоченный массив.

При сортировке слиянием создается дополнительный массив той же длины, что и исходный массив. Использование дополнительной памяти может быть недопустимо при работе с очень большими массивами. Однако, сортировка слиянием имеет оптимальную асимптотическую сложность O(n log n) и применяется в практике программирования для сортировки массивов среднего и крупного размера.

Похожие вопросы на: "java сортировка слиянием "

Promise - определение, принцип работы и примеры использования
Урок PHP: Использование функции include для подключения внешних файлов
Google Maps: Your Ultimate Navigation Solution
Курсы программирования Mkdev – выберите свой путь к знаниям и карьерному росту
DomContentLoaded: как ускорить загрузку страницы
Java Protected: Ограничения доступа в языке программирования
Последний элемент массива в JS: как его получить и применить
Powershell. Операторы сравнения
<h1>JS Array Concat - операция слияния массивов в JavaScript
Make Test - улучшите свои навыки тестирования