merge sort
空间复杂度:O(n)(sort list是O(1))
时间复杂度为O(nlgn)
稳定性:稳定排序
先局部有序,再整体有序
1 public class Solution { 2 /** 3 * @param A an integer array 4 * @return void 5 */ 6 public void sortIntegers(int[] A) { 7 int[] temp = new int[A.length]; 8 mergeSort(A, 0, A.length - 1, temp); 9 } 10 11 public void mergeSort(int[] A, int start, int end, int[] temp) { 12 if (start >= end) { 13 return; 14 } 15 mergeSort(A, start, (start + end) / 2, temp); 16 mergeSort(A, (start + end) / 2 + 1, end, temp); 17 18 merge(A, start, end, temp); 19 } 20 21 public void merge(int[] A, int start, int end, int[] temp) { 22 int mid = (start + end) / 2; 23 int left = start; 24 int right = mid + 1; 25 int index = start; 26 27 while (left <= mid && right <= end) { 28 if (A[left] <= A[right]) { 29 temp[index++] = A[left++]; 30 } else { 31 temp[index++] = A[right++]; 32 } 33 } 34 while (left <= mid) { 35 temp[index++] = A[left++]; 36 } 37 while (right <= end) { 38 temp[index++] = A[right++]; 39 } 40 for (int i = start; i <= end; i++) { 41 A[i] = temp[i]; 42 } 43 } 44 }