- 平均时间复杂度: O(n*logn)
- 最优时间复杂度: O(n*logn)
- 最差时间复杂度: O(n*logn)
- 空间复杂度 : O(n)
- 稳定性 : 稳定
public class MergeSort {
public static void mergeSort(int[] data) {
if (data == null || data.length < 2) { return; }
mergeSort(data, 0, data.length - 1);
}
private static void mergeSort(int[]data, int l, int r) {
if (l == r) { return;}
int mid = l + ((r - l) >> 1);
mergeSort(data, l, mid);
mergeSort(data, mid + 1, r);
merge(data, l, mid, r);
}
private static void merge(int[] data, int l, int mid, int r) {
int[] help = new int[r - l + 1];
int i = 0;
int p1 = l;
int p2 = mid + 1;
while (p1 <= mid && p2 <= r) {
help[i++] = data[p1] < data[p2] ? data[p1++] : data[p2++];
}
while (p1 <= mid) {
help[i++] = data[p1++];
}
while (p2 <= r) {
help[i++] = data[p2++];
}
for (i = 0; i < help.length; i++) {
data[l + i] = help[i];
}
}
}