1.思路:
将数组递归二分,从最底层开始比较交换并向上层合并,合并后的数组就是有序数组
2.图片演示
3.代码演示:
package sort;
import java.util.Arrays;
/**
* 归并排序
* 将数组递归二分,从最底层开始比较交换并向上层合并,合并后的数组就是有序数组
*/
public class Merge6 {
public static void main(String[] args) {
// int[] arr1 = {44,38,5,47,15,31,32,88,2,23,43,54,1,7,56,100,101,102};
int[] arr2={44,38,5,47,15,31};
mergeSort(arr2);
System.out.println(Arrays.toString(arr2));
}
public static void mergeSort(int arr[]) {
int[] temp=new int[arr.length];
sort(arr,0,arr.length-1,temp);
}
public static void sort(int[] arr,int left,int right,int[] temp) {
if(left<right) {
int mid=(left+right)/2;
sort(arr,left,mid,temp);
sort(arr,mid+1,right,temp);
merge(arr,left,mid,right,temp);
}
}
public static void merge(int[] arr,int left,int mid,int right,int[] temp) {
int i=left;
int j=mid+1;
int t=0;
while(i<=mid&&j<=right) {
if(arr[i]<=arr[j]) {
temp[t++]=arr[i++];
}else {
temp[t++]=arr[j++];
}
}
while(i<=mid) {
temp[t++]=arr[i++];
}
while(j<=right) {
temp[t++]=arr[j++];
}
t=0;
while(left<=right) {
arr[left++]=temp[t++];
}
}
}