MergeSort
public class MergeSort {
public int[] mergeSort(int[] array) {
//corner case
if (array == null || array.length <= 1) {
return array;
}
int[] helper = new int[array.length];
mergeSort(array, helper, 0, array.length - 1);
return array;
}
private void mergeSort(int[] array, int[] helper, int left, int right) {
//base case
if (left == right) return;
int mid = left + (right - left) / 2;
//divide
mergeSort(array, helper, left, mid);
mergeSort(array, helper, mid + 1, right);
//merge
merge(array, helper, left, mid, right);
}
private void merge(int[] array, int[] helper, int left, int mid, int right) {
for (int i = left, i <= right, i++) {
helper[i] = array[i];
}
int leftIndex = left;
int rightIndex = mid + 1;
int cur = left;
while (leftIndex <= mid && rightIndex <= right) {
if (helper[leftIndex] < helper[rightIndex]) {
array[cur++] = helper[leftIndex++];
} else {
array[cur++] = helper[rightIndex++];
}
}
while (leftIndex <= mid) {
array[cur++] = helper[leftIndex++];
}
while (rightIndex <= right) {
array[cur++] = helper[rightIndex++];
}
}
Time Complexity : O(nlogn)
Space Complexity : O(n) 需要额外的数组
- 栈空间 O(logN)
- 堆空间 O(nlogn) - O(n)
最后更新于
这有帮助吗?