问题
二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k
解析
归并排序 是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。
设计
public static int[] mergeSort(int[] numArr) {
if (numArr.length < 2) {
return numArr;
}
int mid = numArr.length / 2;
int[] left = Arrays.copyOfRange(numArr, 0, mid);
int[] right = Arrays.copyOfRange(numArr, mid, numArr.length);
return merge(mergeSort(left),mergeSort(right));
}
public static int[] merge(int[] left, int[] right) {
int[] res = new int[left.length + right.length];
for (int index = 0, i = 0, j = 0; index < res.length; index++) {
if (i >= left.length) {
res[index] = right[j++];
} else if (j >= right.length) {
res[index] = left[i++];
} else if (left[i] > right[j]) {
res[index] = right[j++];
} else {
res[index] = left[i++];
}
}
return res;
}
分析
O
(
N
l
o
g
N
)
)
O(NlogN))
O(NlogN))
GitHub地址:二分归并排序