在网上看到归并排序基本上都是把拆分和合并分成两个函数,个人不太喜欢,就自己写一个合成同一个函数的,用起来方便些,记录在这里
public class MergeSort {
public static void MergeSort(int[] arr,int start,int end){
if(arr.length<=1||start>=end){
return;
}
int mid=start+(end-start)/2;
MergeSort(arr,start,mid);
MergeSort(arr,mid+1,end);
int[] tmp=new int[end-start+1];
int i=start,j=mid+1,k=0;
while(i<=mid&&j<=end){
tmp[k++]=arr[i]<arr[j]?arr[i++]:arr[j++];
}
while(i<=mid){
tmp[k++]=arr[i++];
}
while(j<=end){
tmp[k++]=arr[j++];
}
for(i=0;i<tmp.length;i++){
arr[start+i]=tmp[i];
}
}
public static void main(String[] args) {
int[] a=new int[]{4,2,54,2,3342,64,34,2365,463,52,36,32,323,15,234};
MergeSort(a,0,a.length-1);
printarr(a);
}
public static void printarr(int[] arr) {
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}