/**归并排序,稳定 ,时间复杂度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 }