English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Управление потоком Java

Массивы Java

Java ООП (I)

Java ООП (II)

Java ООП (III)

Обработка исключений Java

Java List

Java Queue (очередь)

Сборки Java Map

Сборки Java Set

Ввод/вывод (I/O) Java

Java Reader/Writer

Другие темы Java

Реализация алгоритма слияния в Java

Java полный список примеров

В этом примере мы изучим выполнение алгоритма слияния в Java.

До изучения алгоритма слияния排序а Java, убедитесь, что вы понимаете принцип работы алгоритма слияния.

示例:实现合并排序算法的Java程序

import java.util.Arrays;
//Java中的合并排序
class Main {
  //将两个子数组L和M合并为数组
  void merge(int array[], int p, int q, int r) {
    int n1 = q - p + 1;
    int n2 = r - q;
    int L[] = new int[n1];
    int M[] = new int[n2];
    //填充左右数组
    for (int i = 0; i < n1; i++) {
      L[i] = array[p + i];
    }
    
    for (int j = 0; j < n2; j++) {
      M[j] = array[q + 1 + j];
     }
    //维护子数组和主数组的当前索引
    int i, j, k;
    i = 0;
    j = 0;
    k = p;
    //直到我们到达L或M的任一端,再选择更大的一个
    //元素L和M,并将它们放置在A[p..r]处的正确位置。
    //降序排序
    //使用 if(L[i] >= <[j])
    while (i < n1 && j < n2) {
      if (L[i] <= M[j]) {
        array[k] = L[i];
        i++;
      } else {
        array[k] = M[j];
        j++;
      }
      k++;
    }
    //当L或M中的元素用完时,
    //将其余元素并放入A[p..r]
    while (i < n1) {
      array[k] = L[i];
      i++;
      k++;
    }
    while (j < n2) {
      array[k] = M[j];
      j++;
      k++;
    }
  }
  //将数组划分为两个子数组,对它们进行排序并合并
  void mergeSort(int array[], int left, int right) {
    if (left < right) {
      //m是数组被分成两个子数组的点
      int mid = (left + right) / 2;
      //对每个子数组的递归调用
      mergeSort(array, left, mid);
      mergeSort(array, mid + 1, right);
      //合并已排序的子数组
      merge(array, left, mid, right);
    }
  }
  public static void main(String args[]) {
    //Создание массива, не отсортированного
    int[] array = { 6, 5, 12, 10, 9, 1 };
    Main ob = new Main();
    //Вызов метода mergeSort()
    //Передача параметров: массив, первый индекс и последний индекс
    ob.mergeSort(array, 0, array.length - 1);
    System.out.println("Отсортированный массив:");
    System.out.println(Arrays.toString(array));
  }
}

Вывод 1

Несортированный массив:
[6, 5, 12, 10, 9, 1]
Отсортированный массив:
[1, 5, 6, 9, 10, 12]

Здесь элементы массива отсортированы по возрастанию. Если необходимо отсортировать элементы массива по убыванию, можно изменить код в первом цикле while метода merge():

Менее чем改为больше
if (L[i] >= M[j]) {

Java полный список примеров