归并排序
要求:
对数组进行排序
思路:
把数组对半分,把对半分的数组再次对半分,分到最后子数组长度为1的时候开始按照有序规则,合并两个数组,递归返回,最后合并成一个大的有序数组
代码:
//归并排序
public static int[] mergeSort(int[] arr) {
if (arr.length < 2) return arr;
int[] arr1 = Arrays.copyOfRange(arr, 0, arr.length / 2);
int[] arr2 = Arrays.copyOfRange(arr, arr.length / 2, arr.length);
arr1 = mergeSort(arr1);
arr2 = mergeSort(arr2);
return combine(arr1, arr2);
}
//合并函数
private static int[] combine(int[] arr1, int[] arr2) {
int[] arr = new int[arr1.length + arr2.length];
for (int i = 0, j = 0, k = 0; k < arr.length; k++) {
int temp;
if (arr1.length <= i) temp = arr2[j++];
else if (arr2.