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