Java實現歸併排序

541732025發表於2014-04-14

點選(此處)摺疊或開啟

  1. public class MergeSort {
  2.     //將有二個有序數列a[first...mid]和a[mid...last]合併。
  3.     static void mergearray(int a[], int first, int mid, int last, int temp[]) {
  4.         int i = first, j = mid + 1;
  5.         int m = mid, n = last;
  6.         int k = 0;


  7.         while (i <= m && j <= n) {
  8.             if (a[i] <= a[j])
  9.                 temp[k++] = a[i++];
  10.             else
  11.                 temp[k++] = a[j++];
  12.         }


  13.         //如果從mid到last的資料已經遍歷完畢,將first到mid剩餘的資料複製至sorted
  14.         while (i <= m) {
  15.             temp[k++] = a[i++];
  16.         }


  17.         //如果從first到mid的資料已經遍歷完畢,將mid到last剩餘的資料複製至sorted
  18.         while (j <= n) {
  19.             temp[k++] = a[j++];
  20.         }


  21.         //至此,temp[]為有序的陣列


  22.         //更改a[]中first至last元素順序,使其排序
  23.         for (i = 0; i < k; i++) {
  24.             a[first + i] = temp[i];
  25.         }
  26.     }


  27.     static void mergesort(int a[], int first, int last, int temp[]) {
  28.         if (first < last) {
  29.             int mid = (first + last) / 2;
  30.             mergesort(a, first, mid, temp); //遞迴,將陣列切割至最小(1個元素)
  31.             mergesort(a, mid + 1, last, temp); //同上
  32.             mergearray(a, first, mid, last, temp); //再將相鄰的二個元素合併、排序,往上遞迴,直至最後合併成一個最大的有序陣列
  33.         }
  34.     }


  35.     public static void main(String[] args) {
  36.         int[] x = { 6, 2, 4, 1, 5, 9, 3 };
  37.         int[] sorted = new int[x.length];
  38.         mergesort(x, 0, x.length - 1, sorted);


  39.         for (int i = 0; i < sorted.length; i++) {
  40.             System.out.println(sorted[i]);
  41.         }
  42.     }
  43. }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1141973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章