English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المثال، سنتعلم تنفيذ خوارزمية الترتيب بالدمج في 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]) {