Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 程序?qū)崿F(xiàn)合并排序算法

Java 實例大全

在此示例中,我們將學習在Java中執(zhí)行合并排序算法。

在學習Java中的合并排序算法之前,請確保您了解合并排序算法的工作原理。

示例:實現(xiàn)合并排序算法的Java程序

import java.util.Arrays;

//Java中的合并排序

class Main {

  //將兩個子數(shù)組L和M合并為數(shù)組
  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];

    //填充左右數(shù)組
    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];
     }

    //維護子數(shù)組和主數(shù)組的當前索引
    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++;
    }
  }

  // 將數(shù)組劃分為兩個子數(shù)組,對它們進行排序并合并
  void mergeSort(int array[], int left, int right) {
    if (left < right) {

      //m是數(shù)組被分成兩個子數(shù)組的點
      int mid = (left + right) / 2;

      //對每個子數(shù)組的遞歸調(diào)用
      mergeSort(array, left, mid);
      mergeSort(array, mid + 1, right);

      //合并已排序的子數(shù)組
      merge(array, left, mid, right);
    }
  }

  public static void main(String args[]) {

    //創(chuàng)建一個未排序的數(shù)組
    int[] array = { 6, 5, 12, 10, 9, 1 };

    Main ob = new Main();

    //調(diào)用方法mergeSort()
    //傳遞參數(shù):數(shù)組、第一個索引和最后一個索引
    ob.mergeSort(array, 0, array.length - 1);

    System.out.println("排序后的數(shù)組:");
    System.out.println(Arrays.toString(array));
  }
}

輸出1

未排序的數(shù)組:
[6, 5, 12, 10, 9, 1]
排序后的數(shù)組:
[1, 5, 6, 9, 10, 12]

在此,數(shù)組的元素以升序排序。如果要按降序?qū)υ剡M行排序,則可以在merge()方法的第一個while循環(huán)內(nèi)將代碼更改為:

小于號改為大于
if (L[i] >= M[j]) {

Java 實例大全

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清