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

Tutorial di Base Java

Controllo dei flussi Java

Array Java

Java orientato agli oggetti (I)

Java orientato agli oggetti (II)

Java orientato agli oggetti (III)

Gestione delle eccezioni Java

Lista Java

Queue (coda) Java

Map di Java

Set di Java

Input/Output (I/O) Java

Reader/Writer Java

Altri argomenti Java

Implementazione dell'algoritmo di ordinamento a fusione nel programma Java

Esempi Java completi

In questo esempio, impareremo a eseguire l'algoritmo di ordinamento a fusione in Java.

Prima di studiare l'algoritmo di ordinamento a fusione in Java, assicurati di comprendere il principio di funzionamento dell'algoritmo di ordinamento a fusione.

示例:实现合并排序算法的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[]) {
    //Creare un array non ordinato
    int[] array = { 6, 5, 12, 10, 9, 1 };
    Main ob = new Main();
    //Chiamare il metodo mergeSort()
    //Passare i parametri: array, primo indice e ultimo indice
    ob.mergeSort(array, 0, array.length - 1);
    System.out.println("Array ordinato:");
    System.out.println(Arrays.toString(array));
  }
}

Output 1

Array non ordinato:
[6, 5, 12, 10, 9, 1]
Array ordinato:
[1, 5, 6, 9, 10, 12]

In questo caso, gli elementi dell'array sono ordinati in ordine crescente. Se si desidera ordinare gli elementi in ordine decrescente, è possibile modificare il codice all'interno del primo ciclo while del metodo merge():

Sostituisci il simbolo < con >
if (L[i] >= M[j]) {

Esempi Java completi