English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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]) {