归并排序递归版
package sort;
public class MergeSortRecursively {
public static void mergeSort(int[] array) {
if (array == null || array.length <= 1)
return;
sort(array, 0, array.length - 1);
}
private static void sort(int[] array, int left, int right) {
if (left >= right)
return;
int middle = left + (right - left) / 2;
sort(array, left, middle);
sort(array, middle + 1, right);
merge(array, left, middle, right);
}
private static void merge(int[] array, int left, int middle, int right) {
int length = array.length;
int[] temp = new int[length]; // temp数组用于暂存合并的结果
for (int i = 0; i < length; i++)
temp[i] = array[i];
int index = left, leftIndex = left, rightIndex = middle + 1;
// 将记录由小到大地放进temp数组
while (leftIndex <= middle && rightIndex <= right) {
if (array[leftIndex] <= array[rightIndex])
temp[index++] = array[leftIndex++];
else
temp[index++] = array[rightIndex++];
}
// 接下来两个while循环是为了将剩余的元素放到temp数组中
while (leftIndex <= middle)
temp[index++] = array[leftIndex++];
while (rightIndex < right)
temp[index++] = array[rightIndex++];
// 将temp数组中的元素写入到待排数组中
for (