归并排序
时间复杂度
最好情况:O(nlog2n)
最坏情况:O(nlog2n)
平均情况:O(nlog2n)
稳定性
稳定性:稳定
问题: 给你n个无序的像m的整型数,请使用归并排序实现从小到大的顺序。(0 <= n <= 5 * 104,-1 * 105 <= m <= 1 * 105)
public class MergeSort {
public static void sort(int[] a) {
mergeSort(a, 0, a.length - 1);
}
private static void mergeSort(int[] a, int low, int high) {
if (low < high) {
int mid = (low + high) >> 1;
mergeSort(a, low, mid);
mergeSort(a, mid + 1, high);
adjust(a, low, mid, high);
}
}
private static void adjust(int[] a, int low, int mid, int high) {
int[] tempArr = new int[high - low + 1];
int i = low, j = mid + 1;
int cnt = 0;
while (i <= mid && j <= high) {
if (a[i] <= a[j]) {
tempArr[cnt++] = a[i++];
} else {
tempArr[cnt++] = a[j++];
}
}
while (i <= mid) {
tempArr[cnt++] = a[i++];
}
while (j <= high) {
tempArr[cnt++] = a[j++];
}
for (int k = 0; k < cnt; k++) {
a[k + low] = tempArr[k];
}
}
}