归并排序

归并排序,要理解其排序的方法,就是将数组分成大小相同的两个序列,直至每个序列都有一个数为止,然后进行合并,所以分为,分解 合并两个操作

具体代码如下:

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];
        }
        
    }
}

posted on 2018-08-13 22:23  计科wang  阅读(133)  评论(0编辑  收藏  举报