import org.junit.Test;
public class solution {
@Test
public void test2() {
int[] arr={9,8,7,6,5,4,3,2,1};
mergeSort(arr, 0, arr.length-1);
for(int ele:arr){
System.out.println(ele+" ");
}
}
// 归并排序
/*
* 首先画图
*1 先排左边,再排右边,再合并排序数组
*
*对于排序数组
*1 首先生成新数组,并且赋值
*2 往原数组中放入合适的值
*/
public void mergeSort(int[] arr, int l,int r){
if (l>=r) {
return;
}
int mid = (l+r)/2;
mergeSort(arr, l, mid);
mergeSort(arr, mid+1, r);
merge(arr,l,mid,r);
}
private void merge(int[] arr, int l, int mid, int r) {
int[] memo = new int[r-l+1];
for(int i=l;i<=r;i++){
memo[i-l]=arr[i];
}
int i=l;
int j=mid+1;
for(int k=l;k<=r;k++){
if (i>mid) {
arr[k]=memo[j-l];
j++;
}
else if(j>r){
arr[k]=memo[i-l];
i++;
}
else if (memo[i-l]<=memo[j-l]) {
arr[k]=memo[i-l];
i++;
}else {
arr[k]=memo[j-l];
j++;
}
}
}
}