归并排序,要理解其排序的方法,就是将数组分成大小相同的两个序列,直至每个序列都有一个数为止,然后进行合并,所以分为,分解 合并两个操作
具体代码如下:
import java.util.Arrays;
public class TestMargeSort {
public static void main(String[] args) {
int[] arr = {4,9,15,24,30,2,6,18,20};
MargeSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
private static void MargeSort(int[] arr,int low,int high){//分解操作
if(low<high){//没有加条件,无限递归下去,栈内存溢出
int mid=(low+high)/2;
MargeSort(arr,low,mid);
MargeSort(arr,mid+1,high);
Marge(arr,low,mid,high);
}
}
private static void Marge(int[] arr,int low,int mid,int high){//合并操作
int[] arrB =new int[high-low+1];//辅助数组
int i=low;
int j=mid+1;
int k=0;
while(i<=mid&&j<=high){
if(arr[i]<arr[j]){
arrB[k++]=arr[i++];
}else{
arrB[k++]=arr[j++];
}
}
while(i<=mid)
arrB[k++]=arr[i++];
while(j<=high)
arrB[k++]=arr[j++];
for(i=low,k=0;i<=high;i++,k++){
arr[i]=arrB[k];
}
}
}