归并排序

 /**
     * 借助临时数组进行移动
     */
    @Test
    public void mergerSort(){
        int[] arr={1,4,5,6,7,8,3,2,4,6,7,3,5,6,4,3,2};
        int[] temp = new int[arr.length];
        mergerSort(arr,0,arr.length-1,temp);
        System.out.println(Arrays.toString(arr));

    }

    public void mergerSort(int[] arr,int left,int right,int[] temp){
        if(left<right){
            int mid=(right+left)/2;
            mergerSort(arr,left,mid,temp);
            mergerSort(arr,mid+1,right,temp);
            merger(arr,left,mid,right,temp);
        }
    }

    public void merger(int[] arr,int left,int mid,int right,int[] temp){
        int i=left;//左序列
        int j=mid+1;//右序列
        int t=0;//临时序列
        while (i<=mid && j<=right){
            if(arr[i]<=arr[j]){
                temp[t++]=arr[i++];
            }else {
                temp[t++]=arr[j++];
            }
        }

        while (i<=mid){
            temp[t++]=arr[i++];
        }
        while (j<=right){
            temp[t++]=arr[j++];
        }
        t=0;
        while (left<=right){
            arr[left++]=temp[t++];
        }

    }
View Code

归并排序算法实现

大致思路:

1、首先对数组进行切分,分成最小单元

2、然后进行数据合并,使用临时进行

比如  1 ,4,,5,6,7,8   分成独立的个体,之后组织    14     56     78   之后在   14和56合并排序,之后在和78排序     

原文地址:https://www.cnblogs.com/nihaofenghao/p/9092890.html