归并排序
1.定义
归并排序(Merge Sort)是建立在操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
2.代码实现
public class MergeSort {
//递归的分割数组。并进行排序
public void sort(int[] arr, int start, int end) {
if (start < end) {
int middle = (end + start) / 2;
sort(arr, start, middle);
sort(arr, middle + 1, end);
merge(arr, start, middle, end);
}
}
private void merge(int[] arr, int start, int middle, int end) {
int[] temp = new int[end - start + 1];
int l = start;
int r = middle + 1;
int t = 0;
//按照大小将数依次放到一个零时的数组中
while (l <= middle && r <= end) {
if (arr[l] <= arr[r]) {
temp[t++] = arr[l++];
} else {
temp[t++] = arr[r++];
}
}
//将左边或者右两未放完的数依次放入零时数组。
while (l <= middle) {
temp[t++] = arr[l++];
}
while (r <= end) {
temp[t++] = arr[r++];
}
t = 0;
//将零时数组从新放到原始数组中。
while (start <= end) {
arr[start++] = temp[t++];
}
}
}