归并排序
归并排序采用递归分治的方式来实现排序。
将原数组分为左、右两个数组;
分别对左、右两个数组进行排序;
将排序完毕的左、右数组,根据排序规则合并成一个数组。

/**
* 递归的将数组拆分成左右两个排序好的数组,再合并两个数组
* @param array
* @param left
* @param right
*/
public void mergeSort(int[] array, int left, int right) {
if (left < right) {
int center = (right + left) / 2;
mergeSort(array, left, center);
mergeSort(array, center + 1, right);
merge(array, left, center, right);
}
return;
}
private void merge(int[] array, int left,int center, int right) {
int[] temp = new int[right - left + 1];
int li = left;
int ri = center + 1;
for (int i = 0; i < temp.length; i++) {
if (li < center + 1 && ri < right + 1) {
if (array[li] < array[ri]) {
temp[i] = array[li++];
} else {
temp[i] = array[ri++];
}
} else {
if (li > center) { // 左侧的数组已经没有元素了,则将右侧的剩余元素加入temp
temp[i] = array[ri++];
} else { // 反之,将左侧的剩余元素加入temp
temp[i] = array[li++];
}
}
}
// 将temp中的元素加入array
addAll(array, temp, left);
}
private void addAll(int[] array, int[] temp, int start) {
for (int i = 0; i < temp.length; i++) {
array[start++] = temp[i];
}
}
Last updated