https://www.bilibili.com/video/BV1Zt411o7Rn?p=25
参考:这个视频借鉴的归并写法
主要逻辑在对排好后的两个数组进行归并逻辑,就是有一个指向第一个数组的指针i和指向第二个数组的指针j
进行比较并将小的结果放进临时数组,直到一方遍历完成为止,然后再把没有遍历完的数组以此进入数组即可
private static void mergeSort(int[] arr,int start,int end){
if(start >= end){
return;
}
int mid = (start + end) / 2;
mergeSort(arr,start,mid);
mergeSort(arr,mid + 1,end);
merge(arr,start,mid,end);
}
private static void merge(int[] arr,int start,int mid,int end){
int[] temp = new int[end - start + 1];
int i = start;// 记录第一个数组的下标
int j = mid + 1;// 记录第二个数组的下标
int index = 0;// 记录第新数组的下标
while (i <= mid && j <= end){
if(arr[i] < arr[j]){
temp[index] = arr[i];
i++;
}else {
temp[index] = arr[j];
j++;
}
index++;
}
while (i <= mid){
temp[index] = arr[i];
i++;
index++;
}
while (j <= end){
temp[index] = arr[j];
j++;
index++;
}
for (int k = 0;k<temp.length; k++){
arr[start + k] = temp[k];
}
}
来源:oschina
链接:https://my.oschina.net/u/3574106/blog/3214574