/**归并排序,稳定 ,时间复杂度O(nlogn) 空间复杂度O(n)*/
public static void mergeSort(int[] a , int l ,int h , int[] temp)
9 {
10 if(a== null ||l >=h)return;
11
12 int m = l + (h-l)/2;
13 mergeSort(a , l , m , temp );
14 mergeSort(a , m+1 , h, temp);
15
16 merge(a , l ,m, h , temp);
17 }
18
19 public static void merge(int[] a , int l ,int m , int h , int[] temp )
20 {
21 int x = l;
22 int y = m+1;
23
24 int i=l;
25 for(; i<=h && (x<=m && y<=h) ; i++)
26 {
27 temp[i] = a[x] <= a[y]? a[x++] : a[y++] ;
28 }
29
30 if(x > m)
31 {
32 for(;i<=h; i++)
33 {
34 temp[i] = a[y++];
35 }
36 }
37
38 if(y > h)
39 {
40
41 for(;i<=h; i++)
42 {
43 temp[i] = a[x++];
44 }
45 }
46
47 for(i=l ; i<=h ; i++)
48 {
49 a[i] = temp[i];
50 }
51 }