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.  
8.  
9.         while (i <= m && j <= n) {
10.             if (a[i] <= a[j])
11.                 temp[k++] = a[i++];
12.             else
13.                 temp[k++] = a[j++];
14.         }
15. 

16.  
17.         //如果从mid到last的数据已经遍历完毕,将first到mid剩余的数据拷贝至sorted
18.         while (i <= m) {
19.             temp[k++] = a[i++];
20.         }
21.  
22.  
23.         //如果从first到mid的数据已经遍历完毕,将mid到last剩余的数据拷贝至sorted
24.         while (j <= n) {
25.             temp[k++] = a[j++];
26.         }
27.  
28.  
29.         //至此,temp[]为有序的数组
30.  
31.  
32.         //更改a[]中first至last元素顺序,使其排序
33.         for (i = 0; i < k; i++) {
34.             a[first + i] = temp[i];
35.         }
36.     }
37.  
38.  
39.     static void mergesort(int a[], int first, int last, int temp[]) {
40.         if (first < last) {
41.             int mid = (first + last) / 2;
42.             mergesort(a, first, mid, temp); //递归,将数组切割至最小(1个元素)
43.             mergesort(a, mid + 1, last, temp); //同上
44.             mergearray(a, first, mid, last, temp); //再将相邻的二个元素合并、排序,往上递归,直至最后合并成一个最大的有序数组 
45.         }
46.     }
47.  
48.  
49.     public static void main(String[] args) {
50.         int[] x = { 6, 2, 4, 1, 5, 9, 3 };
51.         int[] sorted = new int[x.length];
52.         mergesort(x, 0, x.length - 1, sorted);
53.  
54.  
55.         for (int i = 0; i < sorted.length; i++) {
56.             System.out.println(sorted[i]);
57.         }
58.     }
59. }