package busishentu;
import java.util.Arrays;
public class MergeSortFinal {
public static void main(String[] args) {
int[] arr={3,5,6,6,8,9,14};
int[] newarr=new int[arr.length];
chaiSort(arr, 0, arr.length-1, newarr);
System.out.println(Arrays.toString(newarr));
}
//拆:
public static void chaiSort(int[] arr,int first,int last,int[] newarr){
if(first<last){
//找中间点
int mid=(first+last)/2+1;
//拆左侧的数据集
chaiSort(arr, first, mid, newarr);
//拆右侧的数据集
chaiSort(arr, mid+1, last, newarr);
//拆完就并
merge(arr, first, mid, last, newarr);
}
}
//并: newarr 长度 == 原来的长度
public static void merge(int[]arr,int first,int mid,int last,int[] newarr){
//第一个数据集的起始下标
int m=first;
//第一个数据集的终止下标
int x=mid;
//第二个数据集的起始下标
int n=mid+1;
//第二个数据集的终止下标
int y=last;
//新数组的起始下标
int index=0;
while(m<=x&&n<=y){
if(arr[m]<arr[n]){//有可能第一个数据集的数据小
newarr[index++]=arr[m++];
}else{
newarr[index++]=arr[n++];
}
}
//如果 剩下的是第一个数据集
while(m<=x){
newarr[index++]=arr[m++];
}
while(n<=y){
newarr[index++]=arr[n++];
}
//起始的值发生了变化需要给arr重新赋值
for(int i=0;i<index;i++){
arr[first+i]=newarr[i];
}
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容