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 сортировка слиянием "

IP адрес 0.0.0.0: вся информация на "Все об IP"
Интерфейсы C++
Auto Py to Exe - Convert Python scripts to standalone executables
Runtime C - ваше решение для разработки быстрых и масштабируемых приложений на языке C
Выбирайте лучшие продукты для программирования на Exit C
Asset Studio - инструмент для создания и оптимизации графики
M3U8 Downloader - скачивайте медиафайлы быстро и просто
Prometheus Docker
Un Comtrade - ваша лучшая торговая платформа
Array Fill - заполнение массивов в программировании