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

تعليمات Java الأساسية

تحكم العملية في Java

مجموعات Java Array

Java موجه الأحداث (I)

Java موجه الأحداث (II)

Java موجه الأحداث (III)

معالجة الاستثناءات Java

قوائم Java (List)

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

إدخال/إخراج Java (I/O)

قراءات/كتابة Java

مواضيع أخرى في 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