概念
采用归并思想/分治法:把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。
时间复杂度
- 平均:O(nlog(n))
- 最好:O(nlog(n))
- 最坏:O(nlog(n))
空间复杂度
O(1)
稳定性
稳定
代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | public class MergeSort implements Sort {
 @Override
 public int[] sort(int[] arr) {
 return sort(arr, 0, arr.length - 1);
 }
 
 private int[] sort(int[] arr, int l, int h) {
 
 if (l == h) {
 return new int[]{arr[l]};
 }
 
 
 int mid = l + (h - l) / 2;
 int[] leftArr = sort(arr, l, mid);
 int[] rightArr = sort(arr, mid + 1, h);
 
 int[] newArr = new int[leftArr.length + rightArr.length];
 
 int m = 0, i = 0, j = 0;
 while (i < leftArr.length && j < rightArr.length) {
 newArr[m++] = leftArr[i] < rightArr[j] ? leftArr[i++] : rightArr[j++];
 }
 
 while (i < leftArr.length) {
 newArr[m++] = leftArr[i++];
 }
 
 while (j < rightArr.length) {
 newArr[m++] = rightArr[j++];
 }
 
 return newArr;
 }
 }
 
 |