1.mergeSort O(nlogn)的时间复杂度,需要O(n)的额外空间。

 1 public void sortIntegers2(int[] A) {
 2         // Write your code here
 3         if (A == null || A.length == 0) {
 4             return ;
 5         }
 6         int[] temp = new int[A.length];
 7         mergeSort(A, 0, A.length - 1, temp);
 8     }
 9     
10     private void mergeSort(int[] A, int start, int end, int[] temp) {
11         if (start == end) {
12             return ;
13         }
14         int mid = start + (end - start) / 2;
15         mergeSort(A, start, mid, temp);
16         mergeSort(A, mid + 1, end, temp);
17         merge(A, start, mid, end, temp);
18     }
19     
20     private void merge(int[] A, int start, int mid, int end, int[] temp) {
21         int index = start;
22         int left = start;
23         int right = mid + 1;
24         while(left <= mid && right <= end) {
25             if (A[left] < A[right]) {
26                 temp[index++] = A[left++];
27             } else {
28                 temp[index++] = A[right++];
29             }
30         }
31         while (left <= mid) {
32             temp[index++] = A[left++];
33         }
34         while (right <= end) {
35             temp[index++] = A[right++];
36         }
37         for (int i = start; i <= end; i++) {
38             A[i] = temp[i];
39         }
40     }
View Code

相关文章: